Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
В нишу низкопольных поездов для северных Скандинавских стран заходит ещё один производитель. Испанская компания CAF заключила контракт со шведской лизинговой компанией Transitio о поставке 20 электропоездов и 8 дизель-электропоездов CAF Civity Nordic. Стоимость контракта - 250 млн. евро, начало поставок - конец 2023 года, в перспективе возможен опцион на ещё 26 составов. Transitio будет сдавать новые поезда в аренду региональным властям, а те, в свою очередь, передадут их железнодорожным операторам для выполнения заказов на пассажирские перевозки. Новые поезда будут курсировать в округах Йёнчёпинг, Кальмар, Кроноберг и Блекинге.
#за_низкий_пол
#CAF
#Швеция
Seven Eritrean National Soccer Team Players Disappear. Read more.
https://borkena.com/2026/04/07/seven-eritrean-national-soccer-team-players-disappear/#Eritrea#soccer#CAF
News: #Ethiopia submits 2028 AFCON bid, seeking fourth hosting after 50-year gap
Ethiopia has formally submitted a bid to host the 2028 Africa Cup of Nations (#AFCON), seeking to stage the continental tournament for a fourth time and for the first time in more than five decades, according to a report by state-owned media citing the Ethiopian Football Federation (#EFF).
The report said the bid was officially lodged with the Confederation of African Football (#CAF), marking Ethiopia’s return to contention for hosting the tournament it last staged in 1976. Ethiopia previously hosted AFCON in 1962, 1968, and 1976, and won the title on home soil in 1962.
If awarded hosting rights, Ethiopia would become the joint second country to stage the Africa Cup of Nations the most times, behind only Egypt (5).
Bahiru Tilahun, Secretary General of the Ethiopian Football Federation, was quoted in...
https://www.facebook.com/AddisstandardEng/posts/pfbid02RBrfdanpeSSvrR4tcTWEyWrsRV4djoQDikrUvipckET9MttjzYM8t98rmQ3EG2o3l
🔵CAF инвестирует $2,5 млрд в “голубую экономику” Латинской Америки и Карибского региона
На Blue Economy and Finance Forum (BEFF) в Монако CAF — Банк развития Латинской Америки и Карибского региона — объявил о новой инвестиционной программе: $2,5 млрд до 2030 года для поддержки устойчивой экономики и сохранения океанов региона.
Основные направления финансирования
🔹 Сохранение и восстановление морских экосистем
🔹 Возобновляемая энергия из океанов
🔹 Ответственный туризм и рыболовство
🔹 Декарбонизация портов и судоходного транспорта
🔹 Развитие технологий: морской биотех, цифровые платформы
🔹 Институциональная поддержка и морская дипломатия
Стратегический контекст
🔹 Новая сумма удваивает предыдущий обязательный уровень — $1,25 млрд, который уже был полностью мобилизован в период 2022–2025 ($1,32 млрд фактически выделено на 35 проектов в 16 странах).
🔹 Всё это входит в стратегию CAF по “голубой экономике” 2030: сочетание устойчивого развития, финансирования, экодипломатии, образования и поддержки прибрежных сообществ.
Почему это важно
🔹 Связанно с подготовкой к UNOC3 (3-я ООН конференции по океанам) в Ницце
🔹 Направлено на повышение устойчивости экосистем, инновации и улучшение благосостояния прибрежных регионов
🔹 CAF подтверждает свой статус основного инвестора в "голубую" трансформацию региона.
#CAF#ГолубаяЭкономика#УстойчивоеРазвитие#ЛатАм#Карибы#Инвестиции#BEFF
👉Всегда свежие новости о странах Латинской Америки!