Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🎨 Первый Федеральный Форум креативных индустрий ArtMasters (с 3 по 5 апреля 2025 ) — главное событие для тех, кто создает будущее!
Это не просто Форум, а масштабное событие, которое объединит лидеров индустрии, молодых специалистов, представителей образования, власти и бизнеса.
📍 Стартуем 3 апреля в концертном зале «Зарядье» — с яркого открытия, которое задаст тон будущему креативных профессий в России. В центре внимания — отечественный контент и его создатели, перспективы рынка и механизмы поддержки новых творческих профессий.
🌟 Чего ждать?
🔹 образовательные программы, мастер-классы, дискуссии и интерактивные проекты;
🔹 участие лидеров кино, театра, музыки, дизайна, digital, медиа и других индустрий;
🔹 возможность познакомиться с ключевыми игроками рынка, найти вдохновение и завести полезные контакты.
🔥ArtMasters — это место для идей, которые движут прогрессом! Здесь рождаются новые коллаборации, раскрываются таланты и обсуждаются тренды, которые формируют будущее креативных индустрий.
Если ты хочешь быть частью этого процесса — скорее регистрируйся и приходи на Форум! 🚀
https://www.forum.artmasters.ru/join
На связи,
ББВ
#ArtMasters2025#КреативныеИндустрии#БудущееЗдесь
Это было красиво, современно и масштабно!
29 августа на сцене Театра на Цветном МТС Live Hall прошло одно из самых зрелищных событий чемпионата — мультимедийное музыкальное «Есенин шоу», посвящённое 130-летию со дня рождения и 100-летию памяти Сергея Есенина.
Участники создали музыку, цифровые миры и мультимедийное оформление для живого концерта. На сцену вышли артисты Академии Ларисы Долиной, представив номера, которые стали результатом совместной работы с финалистами ArtMasters.
Экспертами программы выступили Алексей Романоф («Композитор популярной музыки»), Евгений Тимащук («Дизайнер виртуальных миров») и Антон Сакара («Моушн-дизайнер»). Режиссёром шоу стал Илья Иванов — автор крупнейших телевизионных музыкальных проектов страны.
Музыка, визуальные эффекты, живые голоса и цифровые миры соединились в одно целое, напоминая, что поэзия Есенина живёт и сегодня, находя новые формы звучания.
«Есенин шоу» стало мощной точкой притяжения финалистов и топовых компаний креативных индустрий.
На связи,
ББВ
#backstageheroes
#artmastersfamily
#artmasters2025
Закончился сбор заявок на VI Чемпионат ArtMasters.
Каждый этап приема заявок — очень волнительный период для организатора. Мы два месяца делаем всё, чтобы достучаться до каждого молодого творческого человека и дать ему шанс принять участие в конкурсе, который, возможно, навсегда изменить его профессиональную жизнь в лучшую сторону.
Спасибо всем участникам, которые подали заявки и заполнили профили.
В этом году мы собрали почти 30К заявок, в всего заявок за шесть лет уже почти 135 000!
ArtMasters — это большое сообщество молодых творческих специалистов, которые выбрали свой путь к вершине мастерства.
Удачи всем участникам и обязательно увидимся в Финале.
На связи,
ББВ
#artmasters
#backstageheroes
#artmastersfamily
#artmasters2025