Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#YoshlarKuni
#ProkurorVaYoshlar
#OchiqMuloqot
#YoshlarQo‘llabQuvvatlanadi
#Chilonzor
🟢 Yoshlar tashabbuslari – doimiy e’tiborda!
Davlat rahbari tashabbusi bilan haftaning har payshanbasi “Yoshlar kuni” deb e’lon qilingani munosabati bilan joylarda yoshlar bilan ochiq va samarali muloqotlar tashkil etilmoqda.
Shu doirada Chilonzor tumanida Toshkent shahar prokurori vazifasini bajaruvchisi A. Urmanov rahbarligida Chilonzor tumani hokimi Saidqahhor Xolxo‘jayev, tuman prokurori va boshqa mutasaddilar ishtirokida “Prokuror va yoshlar” mavzusida ochiq muloqot o‘tkazildi.
Uchrashuv davomida har bir yosh bilan alohida suhbatlashilib, ularning muammo va takliflari atroflicha tinglandi. Ko‘tarilgan masalalarni ijobiy hal etish yuzasidan mutasaddilarga aniq topshiriqlar berildi.
Shuningdek, yoshlarning biznes g‘oyalarini qo‘llab-quvvatlash, startap loyihalarini amalga oshirishlariga ko‘maklashish maqsadida O‘zbekiston Savdo-sanoat palatasi hamda tijorat banklari ishtirokida amaliy seminar tashkil etildi. Tadbir davomida startapchi yoshlar o‘z taqdimotlari bilan ishtirok etib, mutaxassislardan tavsiyalar oldilar.
👉👉👉 Yoshlar muammolarini hal etish, ularning tashabbuslarini qo‘llab-quvvatlash va huquqiy madaniyatini oshirish borasidagi ishlar izchil davom ettiriladi.
⬅️⬅️⬅️Lavhamizda tadbir jarayonlari
🔵@Chilonzor_tumani_hokimligi
#YoshlarBilanMuloqot
#YoshlarQo‘llabQuvvatlanadi
#TadbirkorYoshlar
#OchiqMuloqot
#YoshlarKelajagi
Toshkent shahar Chilonzor tumani 114-maktabning faollar zalida Chilonzor tumani prokurori T.Xusanov va IIO, FMB boshlig’i F.G’iyosov tomonidan yoshlar bilan uchrashuv tashkil etildi.
Uchrashuv davomida yoshlar o‘rtasida sodir bo‘layotgan jinoyat va huquqbuzarliklarning oldini olish, ularning salbiy oqibatlari hamda qonunlarga rioya qilishning ahamiyati haqida keng tushuntirish ishlari olib borildi.
Uchrashuv davomida yoshlarni odob-axloq qoidalariga rioya qilish, kattalarga hurmat bilan munosabatda bo‘lish, bo‘sh vaqtni mazmunli o‘tkazish hamda turli salbiy holatlardan yiroq bo‘lish zarurligi haqida tavsiyalar berildi.
🔵@Chilonzor_tumani_hokimligi
#YoshlarBilanMuloqot
#YoshlarQo‘llabQuvvatlanadi
#TadbirkorYoshlar
#OchiqMuloqot
#YoshlarKelajagi
Toshkent shahar Chilonzor tumani 183-maktabning faollar zalida Chilonzor tumani IIO, FMB XPB boshlig‘i mayorE.B. Tojiboyev tomonidan yoshlar bilan uchrashuv tashkil etildi.
Uchrashuv davomida yoshlar o‘rtasida sodir bo‘layotgan jinoyat va huquqbuzarliklarning oldini olish, ularning salbiy oqibatlari hamda qonunlarga rioya qilishning ahamiyati haqida keng tushuntirish ishlari olib borildi.
Uchrashuv davomida yoshlarni odob-axloq qoidalariga rioya qilish, kattalarga hurmat bilan munosabatda bo‘lish, bo‘sh vaqtni mazmunli o‘tkazish hamda turli salbiy holatlardan yiroq bo‘lish zarurligi haqida tavsiyalar berildi.
Shuningdek, Prezidentimiz tomonidan ilgari surilgan “Har payshanba – Yoshlar kuni” tashabbusi doirasida yoshlar bilan muntazam uchrashuvlar o‘tkazish, ularning taklif va muammolarini o‘rganish hamda yoshlarni to‘g‘ri yo‘lga yo‘naltirish muhim ekani alohida qayd etildi. Uchrashuv yakunida yoshlar bilan qiziqtirgan savollarga javob berildi va Hayot Akademiyasi vedio film namoyish qilindi.
🔵@Chilonzor_tumani_hokimligi
#YoshlarBilanMuloqot
#TumanHokimi
#YoshlarQo‘llabQuvvatlanadi
#TadbirkorYoshlar
#AlXorazmiyMahallasi
#126maktab
#OchiqMuloqot
#YoshlarKelajagi
Tuman hokimi yoshlar bilan ochiq muloqot o‘tkazdi
Tuman hokimi yoshlar bilan uchrashuv va muloqotlarini davom ettirmoqda. Navbatdagi ochiq muloqot Al Xorazmiy mahallasida joylashgan 126-sonli umumta’lim maktabida bo‘lib o‘tdi.
Uchrashuvda har sohada ilg‘or bo‘lgan hamda tadbirkorlik faoliyatini boshlash istagini bildirgan yoshlar ishtirok etdi. Ochiq va samimiy ruhda o‘tgan muloqot davomida yoshlarning taklif va tashabbuslari tinglandi.
Shuningdek, yoshlar tomonidan bildirilgan g‘oya va rejalarga alohida e’tibor qaratilib, ularga tadbirkorlik faoliyatini yo‘lga qo‘yish, o‘z biznesini boshlash va rivojlantirish bo‘yicha zarur tavsiya hamda tushuntirishlar berildi.
Tadbir so‘ngida tuman hokimi va mas’ullar maktab jamoasi bilan birgalikda maktabda tashkil etilgan teatr guruhi tomonidan tayyorlangan sahna ko‘rinishlarini tomosha qildi. Iqtidorli yoshlarning mahoratli san’atkorlardek o‘ynagan rollari ishtirokchilarda chuqur taassurot qoldirdi.
Bunday uchrashuvlar yoshlarning faolligini oshirish, ularning tashabbuslarini qo‘llab-quvvatlash va kelajakdagi rejalarini amalga oshirishga xizmat qilishi ta’kidlandi.
👉👉👉Lavhamizda jarayonlar
🔵@Chilonzor_tumani_hokimligi
#YoshlarBilanMuloqot
#TumanHokimi
#YoshlarQo‘llabQuvvatlanadi
#TadbirkorYoshlar
#AlXorazmiyMahallasi
#126maktab
#OchiqMuloqot
#YoshlarKelajagi
Tuman hokimi yoshlar bilan ochiq muloqot o‘tkazdi
Tuman hokimi yoshlar bilan uchrashuv va muloqotlarini davom ettirmoqda. Navbatdagi ochiq muloqot Al Xorazmiy mahallasida joylashgan 126-sonli umumta’lim maktabida bo‘lib o‘tdi.
Uchrashuvda har sohada ilg‘or bo‘lgan hamda tadbirkorlik faoliyatini boshlash istagini bildirgan yoshlar ishtirok etdi. Ochiq va samimiy ruhda o‘tgan muloqot davomida yoshlarning taklif va tashabbuslari tinglandi.
Shuningdek, yoshlar tomonidan bildirilgan g‘oya va rejalarga alohida e’tibor qaratilib, ularga tadbirkorlik faoliyatini yo‘lga qo‘yish, o‘z biznesini boshlash va rivojlantirish bo‘yicha zarur tavsiya hamda tushuntirishlar berildi.
Bunday uchrashuvlar yoshlarning faolligini oshirish, ularning tashabbuslarini qo‘llab-quvvatlash va kelajakdagi rejalarini amalga oshirishga xizmat qilishi ta’kidlandi.
🔵@Chilonzor_tumani_hokimligi
#Chilonzor
#SaidqahhorXolxo‘jayev
#YoshlarTashabbusi
#Startap
#DigitalFinance
Chilonzorda innovatsion g‘oyalar namoyishi: yoshlar startaplari tuman rahbariyati e’tiborida
Saidqahhor Xolxo‘jayev tashabbusi bilan tumanda yoshlar startap loyihalarini qo‘llab-quvvatlash borasida amaliy ishlar izchil davom etmoqda. Xususan, tuman hokimi tuman yoshlarining, shuningdek, Iqtisodiyot universiteti qoshida faoliyat yuritayotgan Digital Finance akseleratsiya markazida tahsil olayotgan tashabbuskor talabalarning ham innovatsion g‘oyalari bilan yaqindan tanishdi.
Markaz rahbari Azizbek Haitov boshchiligida yoshlar tomonidan ishlab chiqilayotgan loyihalar tuman rahbariyati tomonidan sinchiklab o‘rganildi.
Jumladan, Jahongir Anvarov yetakchiligidagi talabalar jamoasi tomonidan tayyorlangan, har mavsumda dolzarb bo‘lgan gazonlarni o‘rishga mo‘ljallangan “Agrokar” qurilmasi alohida e’tiborga sazovor bo‘ldi.
Shuningdek, Nargiza Isakova rahbarligida ishlab chiqilgan maktablar va OTMlar hududlariga o‘rnatish uchun mo‘ljallangan “Aqlli o‘rindiqlar” loyihasi ham innovatsion yechim sifatida yuqori baholandi.
Bundan tashqari, Hulkarbonu Rustamova boshchiligidagi talabalar tomonidan taqdim etilgan kiberjinoyatlardan himoya tizimi loyihasi ham mutasaddilar e’tiborini tortdi. Ushbu tashabbuslar nafaqat axborot xavfsizligini mustahkamlash, balki raqamli iqtisodiyotni rivojlantirishga ham xizmat qiladi.
Yoshlar tomonidan taqdim etilgan barcha startap loyihalar iqtisodiyotimizni rivojlantirish, yangi ish o‘rinlari yaratish va innovatsion muhitni shakllantirishga munosib hissa qo‘shishi ta’kidlandi. Tuman hokimi tomonidan tashabbuskor yoshlarni qo‘llab-quvvatlash, ularning loyihalarini amaliyotga joriy etish borasida zarur tavsiyalar berildi.
#YoshlarQo‘llabQuvvatlanadi #RaqamliIqtisodiyot#KelajakYoshlarniki
⬅️⬅️⬅️ Lavhamizda tadbir jarayonlari
🔵@Chilonzor_tumani_hokimligi