Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#Christian neighborhoods in #Damascus protesting in the middle of the night after targeting the Christians in #Hama by the Islamist gangs calling themselves a government
@TheAlawiteEcho
The Syrian barbaric islamist gangs are now raiding and vandalizing the #Christian city of Skailbiyah in #Hama after they attacked every single non-Sunni sect and religion https://t.co/GX12QdO06L
View tweet
#Damascus : Ismaili Man Killed by Gunmen, Amid Rising Attacks Targeting the Ismaili Community
Madin Ismail Zino, 56, originally from the city of Salamiyah in W. #Hama countryside, has died from critical gunshot wounds he sustained a week ago in e. #Domar area of Damascus. He passed away today April 10, 2026.
Since the start of this year, there has been a significant rise in attacks targeting members of the Ismaili community, including killings and kidnappings, a stark escalation compared to 2025, when incidents against them were largely confined to theft and property damage.
Incidents Targeting the Ismaili Community in 2026:
Haider Haider from Salamiyah killed in Homs on February 18, 2026,
https://x.com/syjusticearc/status/2024161104721859030
Maad Nasser, 66 years old, killed in front of his house in Salamiyah on February 10, 2026
https://x.com/syjusticearc/status/2021267785347641793
Ismail Mustafa Safar from Salamiyah countryside was found dead in
Homs countryside, March 14, 2026
https://x.com/syjusticearc/status/2032824907457761443
Ali Mustafa Al-Eizouqi, killed near Salamiyah on January 22, 2026
https://x.com/syjusticearc/status/2014970181064233072
Joseph Milad Zeino, young man in his twenties, kidnapped from a local store in Domar near Damascus on March 12, 2026.
Kidnappers are demanding a huge ransom
https://x.com/syjusticearc/status/2033538625447587862
Protest in Salamiyah denouncing killings,, and the lack of security in the city, on February 13, 2026
https://x.com/syjusticearc/status/2022310059288547639
#WesternSyria | W. #Hama: Two Alawite men killed while working on their land by Al-Jolani’s terrorist militias
“Muhammad Hafez Al-Ali” and “Yusuf Muhammad Al-Ali” were killed yesterday, April 2, 2026, by an armed terrorist group affiliated with Al-Jolani’s militias, while working on their land located north of the village of #alBayad, in the municipality of Umm Al-Tuyur, in the W. #Hama countryside.
Happening now, an arrest campaign in #Misyaf and Western #Hama countryside by #Jolani forces.
Tens of #Alawite young men have been arrested arbitrarily, following the wide peaceful Alawite protests.
View tweet
Systematic Attacks on Religious Minorities' Shrines and Places of Worship in Syria
W #Hama: An extremist terrorist group has destroyed a religious shrine belonging to the #Alawite community, known as “Sheikh Muhammad al-Maghribi,” located in the village of #Asila in Masyaf, in the Ghab Plain in the rural countryside of Hama Governorate, yesterday 21 March 2026.
#Alawite: It is worth noting that attacks on Alawite religious shrines began following the fall of the regime, reaching their peak during the #massacres carried out against Alawites on the Syrian coast by al-Jolani’s forces. Incidents of assault on Alawite shrines have continued repeatedly, to the point where barely a month passes without an incident involving the bombing, desecration, or burning of shrines across various Alawite regions.
#Druze: Similarly, shrines belonging to the Druze community were subjected to comparable attacks, including vandalism, arson, and bombings, during the massacres of July 2025 in #Suwayda, carried out by the forces of al-Jolani’s terrorist regime.
#Christians: A church in #Damascus was also bombed in June 2025, in addition to attacks on churches in #Homs and the rural Homs region in the #alQusayr area. The massacres that took place in As-#Suwayda likewise saw the burning and destruction of three churches.