Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Secondo agenzie di stampa internazionali, la Guida Suprema dell’Iran, Ali Khamenei, potrebbe essere stata uccisa nel corso degli attacchi militari lanciati oggi dagli Stati Uniti e da Israele contro obiettivi in Iran, tra cui la sua residenza a Teheran. Fonti israeliane citate da alcuni media affermano che vi sarebbero “segnali” della sua morte dopo i bombardamenti e che immagini del corpo sarebbero state mostrate ai vertici israeliani.
La situazione rimane in evoluzione, ma l’eventuale morte di una figura di rilievo mondiale come la Guida Suprema dell’Iran, a poche ore dall’inizio della guerra, potrebbe aprire molti scenari inaspettati.
#cronaca#politica#notizie#notizia#iran
Camminando in questo quartiere la prima sensazione è di un luogo sospeso. Un'arteria storica di Milano, un tempo vivace e multiculturale, oggi percepita da molti dei suoi stessi abitanti come una terra di nessuno.
Questa è Milano senza filtri.
Questa è Via Padova.
Un laboratorio sociale diventato, agli occhi di chi lo vive ogni giorno, un esempio di degrado e abbandono. Il dato demografico racconta una realtà precisa: sette residenti su dieci sono di origine straniera.
A questa complessa situazione si aggiunge il progetto di una nuova moschea. Un’opera pubblica che per l’amministrazione è un passo verso l’inclusione, ma che molti residenti – italiani e non – guardano con scetticismo, chiedendosi se non sia l’ennesimo paravento per non affrontare i veri, urgenti problemi: sicurezza, legalità e vivibilità.
E tu? Cosa ne pensi?
Faccelo sapere nei commenti!
#immigrazione#sicurezza#notizie#notizia#news#italia#milano#viapadova#governo#destra#politicaitaliana#politica
Si cammina guardando oltre le spalle. Si parla a voce bassa. Si sceglie di rientrare prima che il sole tramonti.
In via Padova, la normalità ha smesso da tempo di essere un diritto e si è trasformata in un calcolo, in una strategia di sopravvivenza quotidiana.
Questo non è solo un quartiere, è una ferita aperta nella periferia di una città che troppo spesso distoglie lo sguardo.
Questa è "Milano senza filtri".
Siamo tornati in via Padova, tra negozi chiusi e grate abbassate, e i residenti ci aprono le loro porte non solo per raccontare, ma per testimoniare.
Le loro voci, un coro stanco e rabbioso, dipingono un quadro allarmante: una violenza che non è più un'eccezione, ma lo sfondo costante delle loro giornate. Aggressioni, spaccio in pieno giorno, liti che sfociano in minacce.
L'ordine del giorno, ormai, ha un unico, triste punto fisso: l'insicurezza.
Guarda il video e scopri di più!
#immigrazione#sicurezza#news#attualita#attualità#politica#italia#destra#politicaitaliana#governo#notizia#notizie#viapadova
Beppe Sala dichiara che «le nostre strade sono ancora piene di fascismo». Un’affermazione roboante, buona per i comizi e per i social, ma del tutto scollegata dalla realtà quotidiana dei milanesi. Nelle strade di Milano non sfilano camicie nere: si vedono invece scippi, violenza, spaccio e degrado crescente. Questo è il problema vero, ed è sotto gli occhi di tutti.
Da sindaco, Sala dovrebbe occuparsi della sicurezza concreta dei cittadini, soprattutto dei lavoratori e dei più deboli, invece di attaccarsi a vecchie ossessioni ideologiche utili solo a distrarre dall’incapacità amministrativa. La prassi é chiara: l’antifascismo come alibi per non governare. Milano ha bisogno di ordine, protezione sociale e serietà, non di slogan fuori tempo massimo.
#immigrazione#sicurezza#sala#beppesala#milano#italia#attualita#attualità#news#notizia#notizie#politica#politicaitaliana#governo#destra
Uscire dal carcere non significa lasciarsi alle spalle la condanna, spesso, è solo l'inizio di un'altra forma di pena.
In Italia, il sistema penitenziario continua a mostrare numeri allarmanti: sovraffollamento, su*cidi, carcerazione preventiva e disuguaglianze che raccontano molto più di quanto immaginiamo.
In questo carosello trovi alcuni dati aggiornati (DAP, ISTAT, CNEL) che fotografano la realtà delle carceri italiane nel 2025.
Parlarne è il primo passo per cambiare le cose.
Tu cosa ne pensi?
#carcere#attualità#attualita#politica#news#notizia#notizie#notiziario#galera#italia#governo#milano
#roma
Una storia che interpella tutti: una famiglia che sceglie un'educazione alternativa, una comunità che li sostiene, una decisione del tribunale che rischia di separarli.
Dov'è il confine tra libertà familiare e intervento dello Stato?
#news#famiglia#chieti#notizie#notizia#attualita#attualità#governo#italia#politica#destra#figli#giornale#giornali
Marco Travaglio ha commentato il rapporto tra Donald Trump e l'Europa sottolineando la sudditanza che l'Europa oggi soffre rispetto agli USA.
Emblematica la frase "noi siamo servi e i padroni non discuto coi servi"
#politicaestera#politicaitaliana#notizie#notizia#news#travaglio#trump#usa#europa#governo#destra#ucraina#cina