Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
👟Adidas Grand Court Cloudfoam
#adidas
✅ Oferta: 55,20€❌ PVP: 80,00€
Zapatillas adidas con un diseño muy clásico, apostando por el blanco con las clásicas 3 rayas negras. Disponible en todas las tallas desde la 36.
➡️https://is.gd/CIx611
📣 Síguenos: @compradiccion
📱Síguenos en TikTok: https://www.tiktok.com/@compradiccion
🌎compradiccion.com
👟 Adidas Adizero Adios Pro 4 (Edición BMW Berlin Marathon)
#adidas
✅ Oferta: 200,00€❌ PVP: 250,00€
Esta espectacular edición especial que rinde homenaje a la famosa "BMW Berlin Marathon", y cuenta con varillas ENERGYRODS 2.0 y una doble capa de amortiguación ultraligera LIGHTSTRIKE PRO que te proporciona un máximo retorno de energía y una propulsión inigualable, retrasando la fatiga en las distancias más largas. Además, tienen un diseño de lo más estrafalario.
➡️https://is.gd/5g5PJ8
📣 Síguenos: @compradiccion
📱Síguenos en TikTok: https://www.tiktok.com/@compradiccion
🌎compradiccion.com
👟adidas ADVANTAGE BASE
#adidas
✅ Oferta: 48,75€❌ PVP: 65,00€
Estas zapatillas de adidas son ideales para darle un toque retro a tu look diario. Cuenta con un empeine de piel sintética es resistente pero suave, con un ajuste cómodo, así como con 3 bandas perforadas.
👟 Disponible en varias tallas.
➡️https://is.gd/J3Qfja
📣 Síguenos: @compradiccion
📱Síguenos en TikTok: https://www.tiktok.com/@compradiccion
🌎compradiccion.com
⚽️Vive el Mundial 2026 con adidas
#adidas
✅ Promo: encuentra todas las camisetas del Mundial 2026
En apenas un par de meses dará comienzo el esperadísimo Mundial de fútbol, en el que España parte como una de las grandes favoritas para lograr su segunda estrella. En ese momento, todos los aficionados del país dejan de lado sus diferencias y se unen para apoyar a La Roja, al igual que ocurre en otros países.
Si quieres estar bien preparado para la fecha más importante del año a nivel futbolístico, en adidas ya están disponibles todas las camisetas del Mundial: España, Argentina, México, Alemania, Japón y muchas más. Por tanto, si quieres vivir el Mundial con la camiseta de tu país, aprovecha ahora.
➡️Camisetas del Mundial 2026https://is.gd/Zt0vrC
➡️1ª equipación Españahttps://is.gd/X8sJGs
➡️2ª Equipación Españahttps://is.gd/X5Wsef
➡️2ª Equipación Argentinahttps://is.gd/iyIMon
📣 Síguenos: @compradiccion
📱Síguenos en TikTok: https://www.tiktok.com/@compradiccion
🌎compradiccion.com
ℹ️ Ofrecido por adidas
👟Chaqueta deportiva Adicolor Classics
#adidas
✅ Oferta: 30,00€❌ PVP: 75,00€
Chaqueta deportiva de adidas con el logo clásico en color gris.
📏 Disponible en talla XS
➡️https://is.gd/LBUNaI
📣 Síguenos: @compradiccion
📱Síguenos en TikTok: https://www.tiktok.com/@compradiccion
🌎compradiccion.com
👕 Sudadera adidas cuello redondo Badge
#adidas
✅ Oferta: 35,00€❌ PVP: 70,00€
Sudadera adidas en color caqui con un diseño que apuesta por el cuello redondo y con el logo de "adidas originals fussball club". Es ideal tanto para vestir de sport como de diario.
📏 Todas las tallas disponibles
➡️https://is.gd/0dyUEZ
📣 Síguenos: @compradiccion
📱Síguenos en TikTok: https://www.tiktok.com/@compradiccion
🌎compradiccion.com
👟 adidas VL Court Base
#adidas
✅ Oferta: 33,00€❌ PVP: 60,00€
Hazte con un básico imprescindible para tu armario. Estas zapatillas de estilo casual combinan con absolutamente todo, desde unos vaqueros hasta un look más relajado. Su diseño clásico inspirado en el skate y su gran comodidad las convierten en el calzado perfecto para el trote diario. Son de color gris oscuro con detalles en rojo y dorado.
📏 Tallas 41 hasta 46
➡️https://tinyurl.com/2c5uwxzz
📣 Síguenos: @compradiccion
📱Síguenos en TikTok: https://www.tiktok.com/@compradiccion
🌎compradiccion.com
adidas SL72 OG «Leopard Print» и adidas SL 72 «Cow Print»
Анималистичные принты стали хитом 2025года, а леопардовые и коровьи вообще перевернули мир моды.
А какой принт выбрали бы вы? Делись своим мнением ниже 👇
🛒Связаться с менеджером:
Telegram \ WhatsApp \ сайт
#adidas
Милый парный образ 🥰
Модель на фото - adidas Samba OG «Cream White Gum»
Модель доступна к заказу в KICKSADDICTION!
🛒Связаться с менеджером:
Telegram \ WhatsApp \ сайт
#adidas
Bad Bunny x adidas Ballerina «Bold Gold»🐝
Bad Bunny продолжает свое прочное сотрудничество с adidas, представив новый силуэт adidas Ballerina. В отличие от его обычных массивных дизайнов, эти кроссовки имеют эргономичный и низкий силуэт. Дебютной расцветкой модели станет желтая версия «Bold Gold».
Bad Bunny и adidas официально представили кроссовки Ballerina, смелый дизайн, вдохновленный танцами, ритмом и культурным самовыражением. Этот релиз посвящен Пуэрто-Рико и наследию Бенито Антонио Мартинеса Окасио.
Модель уже доступна к заказу в KICKSADDICTION🫶🏻
🛒Связаться с менеджером:
Telegram \ WhatsApp \ сайт
#adidas
Adidas SL 72 RS «Putty Grey / Shadow Red»
Adidas SL 72 — это классические кроссовки, которые олицетворяют богатое наследие бренда в области спорта и моды. Модель SL 72, впервые представленная на Олимпийских играх в Мюнхене в 1972 году, была разработана как лёгкая обувь для бега. А интересная расцветка зеленый шалфей придает модели роскошный вид
🛒Связаться с менеджером:
Telegram \ WhatsApp \ сайт
#adidas