Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Saranno 689 gli adulti che riceveranno il battesimo in #Belgio nella notte di #Pasqua di quest’anno, un numero triplicato rispetto a dieci anni fa e in costante crescita negli ultimi anni.
Il dato è riportato in un comunicato del vescovado di Bruges, che sottolinea come nella propria diocesi il numero sia più contenuto rispetto ad altre realtà del Paese, anche per la persistente tradizione del battesimo dei bambini e per il carattere meno urbanizzato della regione.
I numeri più alti si registrano a Mechelen-Brussel, con 248 catecumeni, a Tournai con 177 e a Liegi con 79. “Anche nella nostra diocesi cresce l’interesse per la fede”, afferma Nathalie Verstraete, responsabile del catecumenato nel vescovado di Bruges.
“Ci colpisce ogni volta quanto la scelta di queste persone sia personale e sincera. Spesso il loro desiderio di fede nasce da incontri autentici e da esperienze di vita. Questo rende il loro cammino prezioso, per loro stessi e per le nostre comunità di fede”.
I catecumeni si sono preparati per più di un anno, entrando passo dopo passo nella fede e nella comunità cristiana. Intanto ha già preso avvio un nuovo gruppo, più numeroso, in preparazione al battesimo nella veglia pasquale del prossimo anno.
🇧🇪#Belgio – La polizia belga ha fatto irruzione nei locali della Commissione europea a Bruxelles nell'ambito di un'indagine della procura europea (Eppo) su presunte irregolarità nella vendita di immobili per circa 900 milioni di euro nel 2024: il commissario al Bilancio Johannes #Hahn era in carica in quell'anno. L'Eppo riferisce di stare "raccogliendo prove".
@UltimoraPolitics24
“Ogni #abuso è inaccettabile. E la #Chiesa, di fronte agli abusi sessuali al suo interno, in passato ha fallito. La Chiesa avrebbe dovuto, senza alcuna esitazione e pienamente, schierarsi dalla parte delle vittime e contrastare ogni abuso con tutti i mezzi possibili. Ma purtroppo ciò è avvenuto troppo poco, a causa di incredulità, sottovalutazione o per tutelare la propria reputazione”. Lo afferma mons. Luc Terlinden, arcivescovo di Malines-Bruxelles e referente per gli abusi sessuali della Chiesa cattolica in #Belgio, alla vigilia della messa in onda su Canvas del documentario “Lettera al Papa”, seguito della serie Godvergeten. Il presule ricorda che “i vescovi hanno ripetutamente chiesto scusa” e annuncia che “continueremo a farlo e a prenderci le nostre responsabilità”. Sul fronte istituzionale, mons. Terlinden sostiene “pienamente” la proposta di un quadro legislativo generale per tutte le vittime di abusi sessuali: “La Chiesa chiede un trattamento uguale per tutte le vittime”. Domani, mercoledì 4 marzo, parteciperà a un incontro con il ministro Verlinden insieme a una delegazione di vittime e alla coordinatrice nazionale Jessika Soors. Dall’ottobre 2025 oltre 550 vittime hanno ricevuto un sostegno aggiuntivo di 3.000 euro ciascuna per accedere a cure psicoterapeutiche, in attesa del quadro definitivo da parte delle autorità civili.
#UE#EuroParlamento
Con 515 voti favorevoli, 74 contrari e 44 astensioni, l'Europarlamento ha approvato una mozione che stabilisce che a partire dalla prossima legislatura, il Parlamento Europeo passerà da 705 a 720 seggi. Di seguito i cambiamenti:
#PaesiBassi: +2 seggi
#Francia: +2
#Spagna: +2
#Belgio: +1
#Danimarca: +1
#Irlanda: +1
#Lettonia: +1
#Austria: +1
#Polonia: +1
#Slovenia: +1
#Slovacchia: +1
#Finlandia: +1
@OsservatorioEsteri
#Sondaggi#Belgio#Fiandre
Sondaggio di De Standaard:
#VB|ID: 23% (-2)
#NVA|ECR: 22% (+0,5)
#Vooruit|S&D: 15,5% (+3,5)
#OpenVLD|RE: 10% (-1,5)
#Groen|G/EFA: 9% (-2)
#PVDA|LEFT: 9% (+1)
#CDV|EPP: 9% (-1)
Data rilevazione: 14-31 marzo
+/-: 31 marzo-19 aprile 2021
Intervistati: 1001
-Il partito social-democratico Vooruit registra un nuovo record di percentuale (15,5%);
-Il partito democristiano CD&V registra un nuovo minimo di percentuale (8,7%)
@UltimoraPolitics
⚡ Sette paesi dell'#UE si oppongono all'espropriazione degli #asset della #Russia, secondo quanto riportato da #Euractiv.
Al #Belgio, all'#Ungheria e alla #Slovacchia si sono unite l'#Italia, la #Bulgaria, #Malta e la Repubblica Ceca.
#tatianasanti
SEGUI Tatiana Santi:
Telegram | YouTube | Sito Web
📱Donazioni