Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Andrea Ballarati, ospite della conferenza “Confini, Valori, N*zione: Imm*grazione e Sicurezza nell'Italia di oggi” spiega, in un minuto, cos'è il Progetto Rem*grazione, di cui è portavoce Italiano.
Fermare i flussi migr*tori, rimp*triare gli irregolari o chi non si assimila, ma anche investire sulla natalità e sulla cultura, sono alcuni punti di un progetto che sempre più sta prendendo piede non solo in Italia, ma in tutta Europa
E tu? Cosa ne pensi?
Faccelo sapere nei commenti!
#immigrazione#sicurezza#italia#cittá#news#attualità#attualita#politica#politicaitaliana#oggi#remigration
Sulla collina di G*vat K*bi, a pochi chilometri da G*za, la g*erra si guarda come fosse un film. Famiglie intere si radunano per osservare le espl*sioni, tra chi scatta selfie, chi accende una sigaretta, chi noleggia un binocolo per 5 Shekel. Ci sono perfino distributori automatici che offrono bibite e snack: tutto organizzato perché la trag*dia altrui diventi intrattenimento.
Mentre a G*za scorre il s*ngue, dall’altra parte del confine scintilla l’oro: il consumo, il mercato, la leggerezza di chi trasforma la distruzione in svago e la s*fferenza di un popolo in occasione di guadagno.
È il paradosso più crudele del nostro tempo: la gu*rra ridotta a spettacolo, la m*rte a folklore, la vita di un popolo a merce. In questo contrasto tra s*ngue e oro si misura la distanza siderale tra umanità e disumanità.
Il dol*re qui è trasformato in business, la gu*rra viene ridotta a spettacolo.
#israele#attualita#news#gaza#palestina#guerra#oggi
Quando la vi*lenza diventa strumento di politica estera, prima o poi ritorna a bussare alle porte di casa. Le gu*rre combattute lontano, la retorica della libertà usata come maschera di interessi economici, l’addestramento alla disumanizzazione: tutto ciò si traduce oggi in una società che implode sotto il peso delle proprie stesse contraddizioni. La lezione è chiara: ciò che un impero esporta, inevitabilmente lo eredita.
#guerra#michigan#detroit#attualita#news#oggi#america
Questa è la voce di una periferia che le statistiche non riescono a raccontare. Questa è la voce di Milano senza filtri.
Siamo a Quarto Oggiaro, periferia nord della città, dove il degrado non è un'eccezione, ma lo scenario quotidiano. Attraverso la testimonianza diretta di una residente, scopriamo cosa significa vivere in un luogo dove prendere un autobus può voler dire subire un furto e dove la sensazione di insicurezza è una compagna costante.
È da qui che si alza un grido di accusa verso un potere lontano, percepito come sordo e indifferente nelle sue "gabbie dorate".
Una distanza abissale separa le istituzioni dai cittadini, che si sentono abbandonati a se stessi.
Ma nelle tenebre di questa periferia, una piccola luce resiste: guarda il video e scopri di più!
#immigrazione#sicurezza#italia#milano#cittá#quartooggiaro#news#attualità#attualita#politica#politicaitaliana#oggi
L’Inno d’Italia non è “vecchio”, non è “retorico” e non è “fa*cista”.
È semplicemente più serio di noi.
Il 10 dicembre 1847 è nato un Paese che ancora non c’era.
La domanda oggi è: siamo ancora all’altezza di quelle parole?
Scrivilo nei commenti👇🇮🇹
Tu lo senti ancora tuo?
#accaddeoggi#storia#italia#roma#milano#governo#oggi#fatti#avvenimenti#storico#politica#politicaitaliana#destra
Film per Halloween? Non solo paura.
“L’Esorcismo di Emily Rose” è un viaggio tra fede e scienza, tra luce e ombra.
Un processo alla verità dove il demone non è solo un mostro da scacciare… ma qualcosa (o qualcuno) che vive dentro di noi.
Ispirato a una storia vera, questo film ci costringe a guardare negli occhi ciò che non vogliamo vedere: la sottile linea tra mente e mistero, tra Bene e Male.
E se i demoni non ci possedessero… ma fossimo noi a dar loro forma?
Questo Halloween, più che spaventarti, prova a riflettere.
Il vero orrore, forse a volte, è conoscere se stessi.
#halloween#halloween2025#horror#film#cinema#cinemahorror#accaddeoggi#oggi#occulto
Diciott’anni e un ideale.
Oggi abbiamo tutto, ma non crediamo più in niente.
Sergio Bresciani non giocava a fare l’uomo:
Lo era davvero.
#storia#accaddeoggi#guerra#politica#italia#storiaitaliana#oggi#fatti#eventistorici#eventi#accadevaoggi#ricorrenze#ricorrenza