Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
LIVE IN 30 MINUTES❕
The implementation of Nigeria's #OneHealth strategic plan requires multidisciplinary & intersectoral collaboration which cuts across several key sectors.
Register to join us to discuss:
"Connecting Air, Land and Water: When we protect one, we protect all"
🕗 9:00 AM
🔗
https://bit.ly/OneHealthConference24
📣COMING UP
"Connecting Air, Land and Water: When we protect one, we protect all"
Register to join our upcoming #OneHealth virtual event organised in collaboration with other #onehealth stakeholders and support from Global Implementation Solutions
🗓️ March 6, 2024
🕗 9:00 AM
🔗
https://bit.ly/OneHealthConference24
🌍Register To Attend
#OneHealth is not a new concept, but it has become more important in recent years
On the 6th of March, in collaboration with other #onehealth stakeholders and support from Global Implementation Solutions, we will be delving into in-depth discussions on "Connecting Air, Land and Water: When we protect one, we protect all"
Register to join in⬇️
https://bit.ly/OneHealthConference24
⏳ONE HOUR TO GO
Register to join our Head of Comms, Dr Yahya Disu at the @WHO EPI-WIN webinar to discuss the importance of a #OneHealth approach in "Preventing Epidemics & Pandemics in Communities"
🗓️TODAY, 13 September 2023
🕚12:00 P.M.
🔗https://www.who.int/news-room/events/detail/2023/09/13/default-calendar/epi-win-webinar-preventing-epidemics-and-pandemics-in-communities--through-the-one-health-approach
Not all fever is malaria. #LassaFever can start with mild symptoms but may become severe if not treated early. Early detection and treatment save lives!!
✅ Protect yourself and loveones by:
* Keeping your home and surroundings clean
* Keep rodents out of your home
* Visit the nearest health center if you feel sick
Remember prevention is better than cure!
#LassaFever#NCDCNigeria#OneHealth
A #OneHealth approach to disease prevention recognises that the health of people is closely connected to the health of animals and our shared environment.
By protecting one, we help protect all!
#OneHealthNigeria
This #WorldRabiesDay2023, let's unite for a common cause: protecting the health of humans, animals & the environment!
Embrace the "All for 1, #OneHealth for all" theme and join the fight against rabies.
Raise awareness ✅
Vaccinate your pets✅
Together, we can make a rabies-free world a reality!
Learning from the last pandemic, it is evident that our country needs a robust health security infrastructure with an emphasis on:
➡️Prevention
➡️Disease surveillance
➡️Preparedness and response capabilities.
Nigeria's Pandemic Fund application cuts across strengthening #OneHealth workforce, early warning and surveillance and laboratory systems.
#PandemicFundNigeria
🐄🐕 Happy World Veterinary Day 2026! 🩺🌍
Theme: Veterinarians: Guardians of Food and Health
Veterinarians play an invaluable role in ensuring animal welfare, safe food production, disease prevention, and public health protection.
Proud to be part of a profession serving both animals and society every day. 👏🐾
#WorldVeterinaryDay2026#ProudToBeAVet#OneHealth
https://t.me/vets_hub
Antimicrobial Resistance (AMR) Awareness Week
Did you know the Current Data on AMR ?
📊Statistics on AMR
• Over 700,000 deaths globally each year are linked to drug-resistant infections.
• In some countries, up to 50% of antibiotics prescribed in healthcare settings are unnecessary.
• Agricultural use accounts for nearly 80% of all antibiotics sold in some regions, contributing significantly to resistance.
• By 2030, it is projected that AMR could lead to an economic burden of up to $100 trillion globally.
Let’s take action now to combat AMR for a healthier future! 💪#AMRAwareness#FightAMR#OneHealth
Join us:
Telegram | Instagram | Linkedln
Last Friday, the National One Health Technical Committee (NOHTC) brought together key stakeholders across human, animal, and environmental health to:
✅ Review progress on previous action points
✅ Share updates on ongoing programmes and current outbreaks
✅ Align strategies to strengthen Nigeria’s health security through coordinated, multisectoral action
Together, we’re advancing a resilient, data-driven OneHealth system for prevention, preparedness, and response.
#HealthSecurity#NCDCNigeria#PublicHealth#OneHealth
🎉 Друзья!
Сегодня мы отмечаем День ветеринарного работника — праздник тех, кто посвятил себя заботе о здоровье животных и экосистем! 🐾
Факультет БиоВетМед Института живых систем ДГТУ — гордость нашего университета!
За несколько лет он стал лидером в ветеринарии, достигнув впечатляющих результатов:
Федеральный эксперимент по интернатуре.
- Первый в России pet-friendly подход.
- Мегагрант и 12 грантов РНФ и РФФИ.
- 3 национальные премии «Золотой скальпель».
- 3 докторские и 6 кандидатских диссертаций, включая первую в ДГТУ, защищённую в Голландии.
- 2 стипендии Президента РФ и 3 полугодовые стажировки аспирантов за рубежом.
Но главное — это наша молодая, амбициозная команда специалистов ветеринарии, медицины, биологии и инженерии, которая воплощает междисциплинарные исследования в духе международной инициативы One Health — «Единое здоровье» во благо людей, животных и природы. 🌍
Спасибо всем, кто вносит вклад в развитие ветеринарии!
Желаем новых научных открытий, крепкого здоровья и вдохновения! 🩺
#ДеньВетеринара#ДГТУ#БиоВетМед#OneHealth