Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚀🚀 75% Profit on #DMC/USDT for our Premium Members on Binance Futures/Bybit/OKXX/Kucoin/Bitget
✅✅ All target completed - Trade Closed
👁🗨Contact @primemod to enter the Premium Group for high quality SPOT & FUTURES Signals
🚗DeLorean (DMC) Reward Pool on Bitget
🔥 June 24, 2025, 7:00 PM – June 26, 2025, 7:00 PM (UTC+8)
During the event, stake your BGB or DMC tokens and share 66,176,000 DMC in rewards!
About the $DMC project by DeLorean:
1️⃣Strategic Partnerships:DeLorean Labs is collaborating with the Sui Foundation and Mysten Labs, leveraging Sui’s high throughput to enable lightning-fast transactions
⚡️
2️⃣ Brand Power: The iconic Back to the Future car meets Web3 — a nostalgic and compelling mix for fans and blockchain enthusiasts alike.
3️⃣Real-World Utility: Use $DMC to purchase the
🚗DeLorean Alpha 5 EV, limited editions, and exclusive merchandise. Future plans include luxury goods and expanded payment use cases.
4️⃣NFT Ecosystem: $DMC powers the DeLorean Labs marketplace — enabling collecting, reselling, and interactive experiences.
5️⃣Decentralized Governance: Holders of $DMC can vote on features, partnerships, and the future direction of the community.
🔌How to Join
➡️ Visit the staking page
➡️ Choose the $BGB or $DMC pool
➡️ Start staking and earn rewards 💵
Hop into the pool — and ride the crypto car of the future!
#BackToTheFuture#web3#DMC
Я так просто Саше не сдамся - тем временем я делаю уже Данте для другой студии 🌚
Видимо, теперь тоже придётся вставать в 4.30 утра
Только лишь из принципа, правда?..
#kolori#анонс#dmc
📊Сообщество MICE Backstage опубликовало анализ своих участников!
Мы провели исследование, чтобы выяснить, кто входит в наше сообщество, из каких стран они происходят, и каково процентное соотношение мужчин и женщин среди участников. Особое внимание уделили представителям компаний, активно участвующих в жизни сообщества.
Интересные факты из исследования:
- Представители компаний, работающих исключительно в сфере MICE, составляют 41,9%.
- Представители DMC — 13,6%.
- Корпоративные клиенты — 2,3%.
- Event & MICE специалисты — 12,8%.
- Представительство по маркетингу 4,9%
📊Больше данных и подробности на нашей инфографике!
#MICE#MICEBackstage#АнализСообщества#СобытийныйМаркетинг#DMC#EventManagement
🚗💨 Exciting news from the German tuning atelier DMC! They've unveiled the first tuning kit for the stunning Lamborghini Revuelto! 🌟
This incredible kit features:
✨ Two different rear wings
✨ An alternative diffuser
✨ Side skirt overlays
✨ New side mirror housings
The stock V12 engine delivers a jaw-dropping 1015 horsepower, but with DMC's modifications to the exhaust system and engine control unit, it now boasts an impressive 1099 horsepower! 🔥💪
And here's a twist: all parts from the kit will be available for purchase exclusively in Bitcoin! 💰💻
#Lamborghini#Revuelto#DMC#Tuning#Supercar#V12#Performance#Bitcoin#LuxuryCars#Auto