Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример).
Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать?
В Django по умолчанию есть готовая функция slugify для таких случаев.
Но я её никогда не использую. Почему? Потому что её недостаточно!
Приведём пример
>>> from django.utils.text import slugify
>>> slugify('This is a Title')
'this-is-a-title'
Пока всё отлично
>>> slugify('This is a "Title!"')
'this-is-a-title'
Спец символы удалились, всё хорошо.
>>> slugify('Это заголовок статьи')
''
Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить
>>> slugify('Это заголовок статьи', allow_unicode=True)
'это-заголовок-статьи'
Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте.
Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою.
Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку:
🔸1. Исходный текст:
>>> text = 'Мой заголовок №10 😁!'
Взял специально посложней со специальными символами.
🔸2. Транслит
Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги.
from unidecode import unidecode
>>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山")
'N S (r) u P 1/4 Yue Shan'
Очень крутая библиотека, советую👍
В нашем случае получаем такое преобразование:
>>> text = unidecode(text)
>>> print(text)
'Moi zagolovok No. 10 !'
Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы.
А еще наш код уже поддерживает любой язык, будь то хинди или корейский.
🔸4. Фильтр символов
Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона.
>>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text)
>>> print(text)
'Moi_zagolovok_No_10_'
Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_".
🔸5. Slugify
Осталось удалить лишние символы по краям и сделать нижний регистр
>>> text = text.strip('_').lower()
>>> print(text)
'moi_zagolovok_no_10'
Получаем отличный slug! 😎
🌎 Полный код в виде функции.
______________
PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию.
#libs#tricks#django
visvim VARSITY ERA DOWN JACKET.
Varsity Jacket из линии Overseas Exclusive — лаконичное переосмысление университетской классики. Модель выполнена из хлопка french terry. После окрашивания каждая куртка проходит ручную обработку, благодаря которой материал выглядит мягким и слегка «выветренным», будто вещь уже прошла через годы носки.
Внутри — наполнитель из белого гусиного пуха с облегчённым объёмом: он сохраняет тепло, не утяжеляя силуэт, формируя аккуратную округлую посадку. Баланс винтажной эстетики и современного подхода к материалам делает модель универсальной в повседневном гардеробе.
Доступен эксклюзивно в нашем магазине на Большой Дмитровке 20с2.
#visvim
visvim LEATHER ESSENTIALS CASE
Минималистичный аксессуар из высококачественной кожи, выполненный с фирменным для visvim подходом к мастерству и дизайну. Этот компактный кейс идеально подходит для хранения ежедневных мелочей.
Все размеры и расцветки представленыв нашем магазине на Большой Дмитровке 20с2.
#visvim
visvim —рабочий процесс.
История бренда началась в 2001 году, когда Хироки Накамура решил посмотреть на обувь индейских племён с точки зрения современной уличной моды. С тех пор он начал следовать пути изучения и переосмысления традиций создания одежды со всех уголков мира.
Господин Накамура черпает идеи в одежде коренных народов Америки, винтажных вещах Запада и многогранной токийской культуре. Дизайнер поэтапно воссоздаёт забытые технологии производства и обработки одежды, скрупулезно обращаясь с материалами так, как это было принято несколько столетий назад.
#visvim
visvim Valdez Down Coat
Коллекция Autumn/Winter 2025 от Хироки Накамуры продолжает
исследовать тему «будущего винтажа», и центральное место в ней традиционно занимает куртка Valdez. Вдохновленная классической летной паркой N-3B, выполнена из нейлона сверхвысокой плотности, прошедшего уникальную процедуру окрашивания Natural Dyed.
Доступна для заказа в нашем магазине на Большой Дмитровке 20с2.
#visvim
Новое поступление visvim CORDURA 20L.
До создания visvim Хироки Накамура работал в Burton Snowboards, путешествовал по миру вместе с командой райдеров и участвовал в разработках технологичной спортивной одежды, выдерживающей колоссальные нагрузки.
После основания собственного бренда он Накамура захотел создать идеальный городской рюкзак, в котором были бы воплощены особенности передового спортивного снаряжения и винтажной военной экипировки. Так появилась модель «CORDURA», названная в честь одноименного баллистического нейлона.
Каждый сезон дизайнер экспериментирует с деталями рюкзака: добавляет материалы со всех уголков света, а также заимствует элементы из культуры индейских племён и японских традиций.
Для оформления заказа— @infobeliefmoscow
#visvim
visvim SKAGWAY LO SUEDE
SKAGWAY - серия обуви visvim, в которой Хироки Накамура исследует многочисленные особенности и удобство баскетбольных кед, произведенных до начала 1960х годов.
Эта модель создана с уклоном на обувь 1950х, которую отличал низкий силуэт. Подчеркивая влияние той эпохи, дизайнер украсил смещенный к мыску резиновый лейбл леттерингом “visvim” в стиле середины XX века. Верх создан из однотонной замши с британских фабрик, чтобы владелец мог наслаждаться постепенным проявлением благородной патины.
По всем вопросам обращайтесь в поддержку – @infobeliefmoscow
#visvim
visvim BRIGADIER BOOTS-FOLK
Cилуэт visvim на основе деталей американских рабочих ботинок первой половины XX века: замша с итальянских фабрик, наборная подошва, контрастная прострочка и латунная кнопка для усиления швов.
Ботинки дополнены пробковой стелькой, которая впитывает лишнюю влагу и обеспечивает хорошую амортизацию, а также оснащены универсальной подошвой Vibram. Благодаря традиционной рантовой конструкции Goodyear Welt со временем старую подошву можно заменить на новую, тем самым продлив срок службы обуви.
По всем вопросам обращайтесь в поддержку – @infobeliefmoscow
#visvim
visvim Bickle Era Down Jacket — пуховая куртка из плотного хлопкового френч терри, окрашенная и обработанная вручную для создания естественного винтажного эффекта.
Белый гусиный пух, пуговицы из рога буйвола и армейская тесьма подчеркивают внимание к материалу и ремеслу, которое отличает каждую вещь visvim.
По всем вопросам обращайтесь в поддержку – @infobeliefmoscow
#visvim
visvim Social Sculpture Denim
Сила и история винтажного денима вдохновили Хироки Накамуру на создание собственной линейки джинс Social Sculpture. Дизайнер переосмыслил традиционное производство, где волокна разной длинны сперва окрашиваются вручную натуральным индиго согласно канатному методу, а затем медленно сплетатся в единое полотно на старинном оборудовании.
Для оформления заказа - @infobeliefmoscow
#visvim
visvim Cut & Sewn
Переосмысляя наследие винтажной спортивной одежды, Хироки Накамура создет свитштоты с заниженной линией плеча и свободной посадкой. Экспериментируя с длиной рукавов Господин Накамура представил три варианта свитшотов: Mondo, Short Sleeve и 3/4. Каждый из этих ситуэтов отлично подойдет для создания многослойного образа.
Для производства дизайнер использовал мягкую и слегка неоднородную ткань. Хироки Накамура вдохновлялся традициями ручной работы с тканью и использовал натуральные красители для достижения естественного и неравномерного оттенка.
Для оформления заказа - @infobeliefmoscow
#visvim
visvim T-Shirts
Хироки Накамура создал футболки visvim с графикой в стиле автогонок середины ХХ века. Футболки имеют свободный крой и изготовлены из мягкой ткани джерси. Они окрашены натуральными красителями, а их поверхность кропотливо состарена в несколько сложных этапов.
Для оформления заказа - @infobeliefmoscow
#visvim