Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Nouveau dessin révélateur d'Allan Barte ! 😡
Pour partager : Facebook - Twitter
Signez la pétition officielle sur le site de l'Assemblée Nationale pour le #RICconstituant : https://petition.ric-france.fr/assemblee-nationale
Un petit pas pour les militants, un grand pas pour le débat public ^^
Annonce du #RICconstituant de Marie Pochon à la niche Écologiste du 12 février :
https://ecologisteetsocial.fr/2026/01/14/referendum-dinitiative-citoyenne-redonner-du-souffle-a-notre-democratie/
Obs : la niche se terminant à minuit maximum, il se peut que le #RIC ne soit pas pleinement débattu, voire pas débattu du tout, mais nous n'avons jamais été aussi proche d'un débat sur le RIC Constituant à l'Assemblée nationale en tout cas. À suivre...
Analyse du #RIC de Marie Pochon ➜ https://label.ric-france.fr/evaluations/analyse-du-ric-de-marie-pochon-plc-n2081
Cette proposition de “RIC Délibératif”, déposée par Marie Pochon, correspond en partie aux attentes.
Avec une note de 110/300, cette proposition obtient une étoile en catégorie étape, du fait de son caractère “délibératif”.
____________________________
Partagez, likez, commentez
➤ FB - X
Signez les pétitions pour le #RICconstituant
✍️espoir-ric.fr/petition
Aidez à définir le #RIC voulu par les Français
📊culture-ric.fr/consultation
Agissez 🚀ric-france.fr/action
Informez-vous ℹ️ric-france.fr/RIC
✏️@ PourquoiLeRIC
_________________
➤ FB - X - Insta
Signez les pétitions pour le #RICconstituant
✍️espoir-ric.fr/petition
Aidez à définir le #RIC voulu par les Français
➡️culture-ric.fr/consultation
Agissez ! 🚀ric-france.fr/action
Informez-vous 🛈 ric-france.fr/RIC
✏️ Allan Barte
_________________
➤ FB - X - Insta
Aidez à définir le #RIC voulu par les Français
📝culture-ric.fr/consultation
Signez la pétition officielle pour le #RICconstituant
✍️petitions.assemblee-nationale.fr/initiatives/i-2082
✏️ Illustration : Allan Barte
—
Partager :
Facebook - Twitter - Instagram
https://youtu.be/qTkWXIdPY_k
Pourquoi le #RIC ? Pourquoi le #RICconstituant ?
✍️ Signez et faites signer :
https://petition.ric-france.fr/an
Merci Benoît pour ces belles explications !
Yvan Bachaud revient sur les mensonges du président du Conseil Constitutionnel, Laurent Fabius, qui ment aux Français sur l'article 11 de la Constitution, les yeux dans les yeux.
➡️https://youtu.be/w6xH900e0Ls
Sommaire :
00:19 - Initiative PARLEMENTAIRE et non "partagée" !
03:36 - Référendum improbable, pour ne pas dire IMPOSSIBLE !
05:07 - Vedel et le véritable Référendum d'initiative Parlementaire
05:48 - Article 11, simulacre de #démocratie
06:38 - Appel à un Conseil Constitutionnel de juristes triés au sort
07:18 - Appel à l'action pour le #RICConstituant
Interview complète : dailymotion.com/video/x8sokys
______________________
Pétition pour le RICC : espoir-ric.fr/petition
Passer à l'action : ric-france.fr/action
Collectifs qui agissent pour le RIC : ric-france.fr/acteurs-du-ric
__
Partager la vidéo :
Youtube - Facebook - Twitter
Découvrez un entretien intéressant en visio avec 2CDR - Collectif citoyen pour la démocratie réelle 👍
https://www.youtube.com/watch?v=-hXW3Tk3D30
« Faut pas rater le coche !
Echanges avec Clara Egger, candidate pour Espoir-RIC à la présidentielle.
Pourquoi la #présidentielle ? Quelles #stratégies pour instaurer le #RICconstituant de la rue jusqu’aux urnes ? »
Pour en savoir plus sur notre stratégie :
https://www.espoir-ric.fr/strategie
Partager sur Facebook : https://www.facebook.com/espoirRIC/posts/231412159164207
Partager sur Twitter : https://twitter.com/espoirRIC2022
https://www.ouest-france.fr/politique/comment-le-rejet-du-rip-par-le-conseil-constitutionnel-a-relance-les-appels-pour-le-ric-46fdecd4-ea5c-11ed-a6d5-79b136c133c6
Comment le rejet du #RIP par le #ConseilConstitutionnel a relancé les appels pour le #RIC...
Pétition officielle pour le #RICconstituant : https://petition.ric-france.fr/an
📣 TOUS POUR LE #RIC
et plus particulièrement le #RICconstituant !
🎬YT : https://youtu.be/e67N-DOsxBU
...hiérarchie des normes, #UE et contrôle des #médias...
Infos et pétition officielle d'Espoir RIC 2022 :
✍️https://petition.ric-france.fr/an
Cinq 49.3 en 25 jours ?!?!
🍄 Il en pousse tellement qu’on ne pourra bientôt plus les compter !
Après un 15e 49.3 sur la budget de la sécurité sociale, #Borne en fait pousser un 16e sur la loi de finance, un 17e sur la loi de programmation budgétaire et un 18e puis un 19e à nouveau pour budget de la Sécu.
On n’arrive plus à suivre !
Il est temps que ça s’arrête…
Avec le #RICveto, on pourrait bloquer les 49.3 !
Avec le #RIClégislatif, proposer des alternatives…
Avec le #RICconstituant, supprimer le 49.3 ou limiter son utilisation.
Aidez à définir le RIC voulu par les Français :
➡️culture-ric.fr/consultation
Publis :
FB : fb.com/photo/?fbid=645835234427367
X : twitter.com/CultureRic/status/1729160608493576612
Insta : instagram.com/p/C0J66spqSVt
Voici un petit guide pas à pas pour signer nos #pétitions sur le site de l'#AssembléeNationale :
➡️espoir-ric.fr/signer
Pour rappel, ces pétitions pour le #RICconstituant et le #RéférendumObligatoire doivent atteindre 5000 signatures avant fin décembre pour pouvoir être examinées en Commission des lois.
Et on a besoin de VOUS TOUS pour ça 😉
✍️Signez, partagez les publications et demandez à vos proches de signer en leur expliquant à quel point c'est important !
Plus d'infos : espoir-ric.fr/petition
____________________________________
Partager le guide :
➤ FB - X - Insta