Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
📣 O‘zbekistonda Young Climate Champions loyihasi ekovolontyorlari tashabbusi bilan Maktabgacha va maktab ta’limi vazirligi, Ekologiya vazirligi, YUNISEF, BMTTD va Zamin fondi ko‘magida LCOY bo‘lib o‘tdi.
~~~
📣 LCOY в Узбекистане прошла по инициативе эковолонтёров проекта Young Climate Champions при поддержке МДШО, Минэкологии, ЮНИСЕФ, ПРООН и Фонда Zamin.
#LCOY#YoungClimateChampions#EcoSchoolsUzbekistan
😀Zamin🌐Instagram🌐Facebook
🗝 Iqlim o‘zgarishiga moslashish, uning oqibatlarini yumshatish va iqlim adolatini ta’minlash bo‘yicha zarur chora-tadbirlar bo‘yicha g‘oyalar va tavsiyalarni o‘z ichiga olgan Yoshlar milliy bayonotini ishlab chiqish LCOYning asosiy natijasiga aylandi. Bayonotning ishlab chiqilishi butun mamlakat bo‘ylab yoshlar bilan o‘tkazilgan avvalgi onlayn va yuzma-yuz maslahatlar natijalariga asoslangan.
📝 LCOYning yakuniy bayonoti milliy siyosat va strategik qarorlarni ishlab chiqish, masalan, Milliy miqyosda belgilanadigan ulushlarni — Parij kelishuvining har bir ishtirokchisi tomonidan issiqxona gazlari chiqindilarini kamaytirish va iqlim o‘zgarishiga moslashish chora-tadbirlari bo‘yicha o‘rnatiladigan iqlim majburiyatlarini kelgusida yanada ishlab chiqishga asos bo‘lib xizmat qiladi.
🌍 Bayonot 2025-yilning noyabr oyida Braziliyada bo‘lib o‘tadigan Birlashgan Millatlar Tashkilotining iqlim o‘zgarishi bo‘yicha 30-konferensiyasiga taqdim etiladi.
~~~
🗝 Ключевым результатом LCOY стала разработка Национального заявления молодёжи с идеями и рекомендациями по необходимым мерам адаптации к изменению климата, смягчению его последствий и обеспечению климатической справедливости. Разработка заявления основана на результатах предыдущих онлайн и очных консультаций с молодежью по всей стране.
📝 Итоговое заявление LCOY послужит основой для разработки национальной политики и стратегических решений, например, для дальнейшей разработки Национально определяемых вкладов — климатических обязательств, которые каждая страна-участница Парижского соглашения устанавливает в отношении сокращения выбросов парниковых газов и мер по адаптации к изменению климата.
🌍 Заявление будет представлено на 30-й Конференции Организации Объединенных Наций по изменению климата, которая состоится в Бразилии в ноябре 2025 года.
#LCOY#YoungClimateChampions#EcoSchoolsUzbekistan
😀Zamin🌐Instagram🌐Facebook
💬 O‘zbekistonda ilk bor BMTning Iqlim o‘zgarishi to‘g‘risidagi сheklangan konvensiyasi huzuridagi Bolalar va yoshlar masalalari bo‘yicha global rasmiy guruh shafeligida Yoshlarning mahalliy konferensiyasi (LCOY) o‘tkazilmoqda.
📣 LCOY "yashil" madaniyat va yoshlarning iqlim o‘zgarishiga qarshi harakatlarini targ‘ib qilish borasida muhim platforma hisoblanadi. Platforma yoshlarga iqlim muammolari bo‘yicha g‘oyalar va yechimlar almashish, tengdoshlari va ekspertlar bilan muloqot qilish imkonini beradi. Konferensiya yoshlar va bolalarni iqlim, iqlim o‘zgarishi va uning oqibatlari fanidan xabardor qilish, shuningdek, O‘zbekistonning barqaror taraqqiyoti uchun iqlim o‘zgarishiga qarshi kurashda yoshlarning sa’y-harakatlarini kuchaytirishga qaratilgan.
📩 Konferensiyada ishtirok etish uchun minglab arizalar orasidan O‘zbekistonning barcha hududlaridan bo‘lgan 100 nafardan ortiq yoshlar tanlov asosida saralab olindi.
🏆 O‘zbekistondagi LCOY "Yosh ekochempionlar" milliy hamjamiyati a’zolari bo‘lgan yoshlar tomonidan tashabbus ko‘rsatilgan va tashkil etilgan organik jarayonning natijasi bo‘ldi.
~~~
💬 Впервые в Узбекистане проходит Локальная конференция молодёжи (LCOY) под эгидой Глобальной официальной группы по делам детей и молодёжи при Рамочной конвенции ООН об изменении климата.
📣 LCOY является важной площадкой для продвижения «зелёной» культуры и действий молодёжи для борьбы с изменением климата. Платформа позволит молодёжи обменяться идеями и решениями климатических проблем, пообщаться со сверстниками и экспертами. Конференция направлена на просвещение молодёжи и детей в области науки о климате, изменения климата и его последствий, а также на усиление действий молодёжи в борьбе с изменением климата для устойчивого развития Узбекистана.
📩 Для участия в конференции на конкурсной основе из тысяч заявок были отобраны более 100 молодых ребят со всех регионов Узбекистана.
🏆 LCOY в Узбекистане — следствие органичного процесса, инициированного и организованного молодыми людьми — членами Национального сообщества «Молодые экочемпионы».
#LCOY#YoungClimateChampions#EcoSchoolsUzbekistan
😀Zamin🌐Instagram🌐Facebook
💬 O‘zbekistonda ilk bor BMTning Iqlim o‘zgarishi to‘g‘risidagi сheklangan konvensiyasi huzuridagi Bolalar va yoshlar masalalari bo‘yicha global rasmiy guruh shafeligida Yoshlarning mahalliy konferensiyasi (LCOY) o‘tkazilmoqda.
📣 LCOY "yashil" madaniyat va yoshlarning iqlim o‘zgarishiga qarshi harakatlarini targ‘ib qilish borasida muhim platforma hisoblanadi. Platforma yoshlarga iqlim muammolari bo‘yicha g‘oyalar va yechimlar almashish, tengdoshlari va ekspertlar bilan muloqot qilish imkonini beradi. Konferensiya yoshlar va bolalarni iqlim, iqlim o‘zgarishi va uning oqibatlari fanidan xabardor qilish, shuningdek, O‘zbekistonning barqaror taraqqiyoti uchun iqlim o‘zgarishiga qarshi kurashda yoshlarning sa’y-harakatlarini kuchaytirishga qaratilgan.
📩 Konferensiyada ishtirok etish uchun minglab arizalar orasidan O‘zbekistonning barcha hududlaridan bo‘lgan 100 nafardan ortiq yoshlar tanlov asosida saralab olindi.
🏆 O‘zbekistondagi LCOY "Yosh ekochempionlar" milliy hamjamiyati a’zolari bo‘lgan yoshlar tomonidan tashabbus ko‘rsatilgan va tashkil etilgan organik jarayonning natijasi bo‘ldi.
~~~
💬 Впервые в Узбекистане проходит Локальная конференция молодёжи (LCOY) под эгидой Глобальной официальной группы по делам детей и молодёжи при Рамочной конвенции ООН об изменении климата.
📣 LCOY является важной площадкой для продвижения «зелёной» культуры и действий молодёжи для борьбы с изменением климата. Платформа позволит молодёжи обменяться идеями и решениями климатических проблем, пообщаться со сверстниками и экспертами. Конференция направлена на просвещение молодёжи и детей в области науки о климате, изменения климата и его последствий, а также на усиление действий молодёжи в борьбе с изменением климата для устойчивого развития Узбекистана.
📩 Для участия в конференции на конкурсной основе из тысяч заявок были отобраны более 100 молодых ребят со всех регионов Узбекистана.
🏆 LCOY в Узбекистане — следствие органичного процесса, инициированного и организованного молодыми людьми — членами Национального сообщества «Молодые экочемпионы».
#LCOY#YoungClimateChampions#EcoSchoolsUzbekistan
😀Zamin🌐Instagram🌐Facebook
#LCOY#YoungClimateChampions#EcoSchoolsUzbekistan
В Узбекистане проходит первая в истории Локальная конференция молодёжи (LCOY) под эгидой Глобальной официальной группы по делам детей и молодежи (YOUNGO) при Рамочной конвенции Организации Объединённых Наций об изменении климата (РКИК ООН, UNFCCC).
Конференция, на которую были отобраны делегаты из тысяч заявок из всех 14 регионов Узбекистана, является важной площадкой для продвижения «зеленой» культуры и действий молодёжи для борьбы с изменением климата.
📱Instagram📱Telegram
📱Facebook📱Youtube