Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
СПАСИБО, ЧТО ПРОЖИЛИ ЭТУ ИСТОРИЮ ВМЕСТЕ С НАМИ 🔥🌍
«Первобытный инстинкт» остался в прошлом, но энергия до сих пор гуляет по чатам, сторис и сердцам. 300 человек. Полный зал. И море эмоций, которые мы не забудем.
Спасибо каждому, кто танцевал, кто боялся, кто охотился за битом и кто остался до финального аккорда наследия.
ФОТООТЧЕТ УЖЕ ГОТОВ 📸
https://ktitov.wfolio.pro/disk/18-04-2026-cabassa-den-rozhdeniya-18-04
А МЫ НЕ ОСТАНАВЛИВАЕМСЯ.
Уже 30 МАЯ запускаем новую главу.
Её название — «РИТУАЛЫ».
Это будет другая энергия. Другой свет. Другая глубина.
Готовьтесь.
Скоро расскажем всё.
До встречи в новом ритуале. 🖤
#Wakanda
СЕГОДНЯ. ДЕНЬ Х. WAKANDA. 🔥
18 апреля. Santa Barbara. 23:00.
Входная дверь — это портал в страну, где правят ритм и инстинкты.
Что тебя ждёт внутри:
🔺 3 инстинкта — Страх, Охота, Наследие. История, которую расскажут Oleg Milov, Cabassa и Etal.
✨ Живые африканские барабаны — ритм, который чувствуешь каждой клеткой.
🔺 Танцоры Wakanda — визуальная магия.
✨Фотозона — сохрани этот вечер.
🔺 Live vocal Cabassa x Kniagna — презентация нового трека.
💥DJ Support: John Candy, Nedisco, Bondisco, Max Stamp, Dangelovs — ритм не остановится ни на секунду.
🎫 Билеты на входе дороже.
🔥 Первые 30 гостей — WELCOME-ДРИНК в подарок!
💰 Цены сегодня:
• До 00:00 — 1300₽
• После 00:00 — 1500₽
https://wakanda.art
⚠️ Happy Birthday Early Bird уже закончился. Промокоды не действуют.
Ты не будешь зрителем. Ты станешь частью истории Ваканды.
Страх. Охота. Наследие. Одна ночь. Твоя история.
Ждём тебя. 🖤🔥
#Wakanda
⏳ ОСТАЛОСЬ ВСЕГО 2 ЧАСА!
Промокод INSTINCT (скидка 50%) перестанет работать через 120 минут.
Happy Birthday Early Bird — тоже улетит навсегда.
🎁 Твой последний шанс:
👉 Переходи на сайт: https://wakanda.art
👉 Вводи промокод INSTINCT
👉 Забирай билет за полцены
18 апреля. Santa Barbara. День рождения Cabassa.
Ты или внутри, или снаружи.
#Wakanda
Santa Barbara помнит наши ритмы.
18 апреля мы возвращаемся, чтобы написать новую главу. Будет жарко. Будет дико.
Будет Wakanda
https://wakanda.art/
#wakanda
ВАЖНАЯ НОВОСТЬ ДЛЯ ВСЕХ, КТО С НАМИ 🔥🌍
Мы строим страну Ваканда не только на танцполе, но и в цифровом пространстве.
Теперь у нас есть САЙТ.
Место, где ты можешь узнать всё о наших вечеринках, купить билет, погрузиться в атмосферу до того, как войдёшь в зал.
👉https://wakanda.art/
А ГЛАВНОЕ СОБЫТИЕ УЖЕ БЛИЗКО:
📅 18 апреля — возвращаемся в Santa Barbara, чтобы отпраздновать ДЕНЬ РОЖДЕНИЯ ОСНОВАТЕЛЯ WAKANDA — CABASSA.
🎫 ЗАВТРА — СТАРТ ПРОДАЖ БИЛЕТОВ.
Первые 50 билетов — HAPPY BIRTHDAY EARLY BIRD по специальной цене.
Сайт уже готов. История ждёт.
Ты с нами?
#Wakanda
2 ДНЯ ДО WAKANDA! 🔥⚡
Листаем архив и вспоминаем, как это было. А теперь представьте: в субботу всё это оживёт снова. Но уже в Secret Room — там, где всё начиналось. ✨
🎥 Смотрите видео и ловите тот самый вайб.
Мы — Wakanda.
Мы — идея.
Мы — культура. 🖤
🥁 Живые африканские барабаны
🎧 TWIST SOUND (Moscow)
💃 Особое шоу
🎵 Все резиденты Wakanda
📍 21 марта | Secrets Night Room | Полтавская, 7
⚠️ ПОСЛЕДНИЕ БИЛЕТЫ ДО ПОВЫШЕНИЯ!
В пятницу цена вырастет. Успевайте забрать сейчас 👇
🎫https://spb.qtickets.events/220940-the-return
Кто на видео — тот знает. Кто ещё не был — узнает в субботу.
#Wakanda
Самый нежный праздник уже близко! 🌷
Дарите тепло, получайте эмоции. А мы дарим вам весеннюю скидку на самую ожидаемую вечеринку весны.
🌸 ПРОМОКОД: WAKANDA
🌸 Дарит приятный бонус на билеты
🌸 Действует с 6 по 8 марта включительно
---
🎫 WAKANDA: THE RETURN
📍 Secrets Night Room
📅 21 марта | 23:00
🥁 Живые барабаны | TWIST SOUND (Moscow) | Резиденты Wakanda
Это не просто вечеринка. Это — возвращение туда, где всё начиналось.
➡️ Билеты по ссылке: https://spb.qtickets.events/220940-the-return
Активируйте промокод WAKANDA при покупке и забирайте свой бонус.
Порадуйте себя и близких. Весна начинается с ритма. 💫
#Wakanda
Барабаны просыпаются
👂Слышите?
Это бьётся сердце Wakanda. Оно всегда было здесь, просто ждало своего часа.
21 марта. Secret Room. Возвращение.
#wakanda