Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
⚡️ [🇪🇺] #ЕУ/#Русија: Каја Калас је под критикама због оштрог курса према Русији; у политичким и стручним круговима све више се наводе оцене о ирационалном патолошком моделу опседнутости и мржњи према овој земљи.
🇷🇸https://t.me/borbeni_efektivi
⚡️ [🇪🇺] #ЕУ/#Русија: шефица европске дипломатије Каја Калас поручила је да нема ресетовања односа ЕУ и Русије ни после завршетка рата у Украјини.
🇷🇸https://t.me/borbeni_efektivi
⚡️ [🇪🇺🇷🇸] #ЕУ/#Србија: Брисел (ЕК) изразио жаљење што званични Београд још није процесуирао одговорне за „напад” у Бањској 2023, посебно након судске пресуде тројици Срба у Приштини* 24. априла.
🇷🇸https://t.me/borbeni_efektivi
⚡️ [🇪🇺🇷🇺] #ЕУ/#енергетика: Каја Калас упозорила земље југоисточне Азије да не купују руску нафту и да интензивно раде (самостално или блоку) у циљу раскидања зависности од Русије.
🇷🇸https://t.me/borbeni_efektivi
⚡️ [🇭🇺] #Мађарска/#ЕУ: Петер Мађар иде у Брисел ради деблокаде 10 млрд € средстава замрзнутих због спора ЕУ са владом Виктора Орбана.
🇷🇸https://t.me/borbeni_efektivi
⚡️Будимпешта (Мађарска): Петер Мађар поручио је да Русија представља безбедносну претњу (медведа са којим се у историји Мађарска доста пута суочавала) и да Европа мора да створи сопствени систем одбране.
→ Линк: /t.me/borbeni_efektivi
→ Извор: /t.me/borbeni_efektivi
🪖#Мађарска〣#ПетерМађар〣#Русија〣#ЕУ〣#безбедност〣#април_2026
🇷🇸https://t.me/borbeni_efektivi
⚡️Брисел(ЕУ): Урсула фон дер Лајен упозорила да су трошкови ЕУ за увоз фосилних горива од почетка иранског рата, порасли за више од €22 млрд, док затварање Ормуског мореуза „озбиљно штети“ европској економији где се слобода пловидбе намеће као императив.
→ Линк: /t.me/borbeni_efektivi
→ Извор: /t.me/borbeni_efektivi
🪖#ЕУ〣#УрсулаФонДерЛајен〣#Ормуски_мореуз〣#енергетика〣#Иран〣#април_2026
🇷🇸https://t.me/borbeni_efektivi
⚡️Брисел/Загреб: известилац Европског парламента Тонино Пицула на "х" мрежи најавио да ће се заложити за обуставу доделе средстава из фондова ЕУ за Србију.
** Као разлоге навео репресију, медијске притиске, урушавање правосуђа и изборног интегритета.
→ Линк: /t.me/borbeni_efektivi
→ Извор: /t.me/borbeni_efektivi
🪖#Србија〣#ЕУ〣#Тонино_Пицула〣#Вучић〣#политика〣#април_2026
🇷🇸https://t.me/borbeni_efektivi
⚡️ Додик: Москва има право да води суверену политику; У победама Русије видимо и своје победе
Република Српска — председник СНСД-а Милорад Додик у интервјуу за РИА Новости поручио је да Москва има право на суверену политику, да Срби у победама Русије виде и своје победе, те да је дугорочно енергетско снабдевање Српске поуздано пре свега са истока, из Русије и преко Србије.
📌 Истовремено је оптужио ЕУ и посебно Немачку за континуирани притисак и дестабилизациону агенду на Балкану.
→ Извор: РИА Новости
→ Линк: /t.me/borbeni_efektivi
🪖#Република_Српска〣#Милорад_Додик〣#Русија〣#Србија〣#енергетика〣#ЕУ〣#Немачка
🇷🇸https://t.me/borbeni_efektivi
⚡️Пицула: Вучићу након пада Орбана треба заврнути "славину"
⚫️Брисел(ЕУ): Тонино Пицула оцењује да су Александар Вучић и Милорад Додик поразом Виктора Орбана изгубили важног заштитника у ЕУ; то види као простор за промену политике Брисела према Србији.
⚫️Како наводи, ЕУ треба да промени и наратив и политику према Србији, уз оцену да Александар Вучић реагује једино на финансијски притисак.
→ Линк: /t.me/borbeni_efektivi
→ Извор: /t.me/borbeni_efektivi
🪖#ЕУ〣#Србија〣#Пицула〣#Вучић〣#финансијски_притисак
🇷🇸https://t.me/borbeni_efektivi
Приштина је именовањем Агрона Бајрамија за главног преговарача још једном „подигла“ ниво дијалога - толико да га је свела на службеничку форму. Али без бриге, Београд је тај модел увео још 2012, када се власт вредно потрудила да укине Министарство за КиМ и тему пребаци у канцеларијске фиоке. 📉
Резултати? Више него „видљиви“ - КиМ се предаје тихо, без буке, скоро неприметно. 🤐 Дијалог под покровитељством Европске уније наставља да траје, углавном сам са собом, јер резултати очигледно нису приоритет. 💤
На терену, Срби на КиМ „осећају напредак“ — институције нестају, гаранције бледе. Али важно је да процес иде даље, макар нико више не зна куда.
#КиМ#Србија#политика#дијалог#ЕУ#Београд#Приштина
Досије није затворен.
Напротив - тек се отвара⁉️
https://t.me/politickidosije
⚡️ЕУ/САД — Вашингтон, према Financial Times, сигнализира Бриселу да енергетска сарадња више није одвојена од трговинско-политичких обавеза: ако споразум (САД/ЕУ) не буде потврђен, под знаком питања могу се наћи и повољни услови за амерички LNG.
📌 Како се наводи суштина је јасна — у тренутку раста цена и блискоисточне нестабилности, САД енергију све отвореније користе као инструмент стратешког притиска на ЕУ.
→ Линк: /t.me/borbeni_efektivi
→ Линк: /t.me/borbeni_efektivi
🪖#ЕУ〣#САД〣#LNG〣#енергетика〣#Брисел〣#притисак〣#трговина
🇷🇸https://t.me/borbeni_efektivi