Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Calling startups in the field of #agritech & other sectors, developing digital solutions that can reduce the digital divide and boost the global economy for G20 #DigitalInnovationAlliance.
Know more at https://mygov.in/task/launch-applications-g20-digital-innovation-alliance/
#G20India
China invents game-changing process that turns desert sand into fertile soil in just 10 months
[Read FullArticle]
@WorldNews#DesertGreening#Agritech#ChinaTech
Что делаем осенью, чтобы весной отдыхать? Правильно, наносим упреждающий удар по сорнякам! 🌾
Только что обработали озимую пшеницу (посев 20.09) современным гербицидом «Секатор Турбо».
· Норма: 65 г/га
· Водовылив: 35 л/га
Зачем это нужно?
✅ Чтобы уже с осени очистить поле от сорняков.
✅ Дать культуре уйти в зиму чистой и без конкурентов.
✅ Весной не тратить время и деньги на опрыскивание.
✅ Избежать лишнего стресса для пшеницы в самый важный период вегетации.
Кстати, о севе! У нас есть опыт с разной нормой высева: и 2 млн, и 4 млн всхожих семян на га. Как думаете, какая густота покажет лучший результат? 👇
А вы применяете осеннюю гербицидную обработку? Какие нормы высева считаете оптимальными? Делитесь опытом в комментариях! 🚜
#Пшеница#ОзимаяПшеница#СекаторТурбо#Гербициды#ЗащитаРастений#Агрономия#СельскоеХозяйство#Агробизнес#Фермер#Зерно#Растениеводство#Agritech#Урожай2024#ОсенниеПолевыеРаботы#НормыВысева
Indonesian Unicorn eFishery Faces Crisis
eFishery, Indonesia's smart fish feeder unicorn, faces severe troubles after a board investigation revealed massive misrepresentation of business metrics. Initially claiming to have sold 400,000 units, true sales were only 6,300 with severe financial losses from 2018 to 2024. Recent data indicates $50 million left in accounts and substantial layoffs, shrinking from 2,600 to 200 employees. Investors like Temasek and Softbank now face losses, expecting only a fraction returned per dollar invested. Concerns arise regarding due diligence practices during funding rounds when financial issues were likely evident. Read more from Bloomberg here.
#eFishery#Indonesia#Startup#Unicorn#Softbank#Temasek#Fintech#Investment#Business#Crisis#Economy#Funding#HealthTech#AgriTech#TechNews#FinancialFraud#DueDiligence#InvestorLoss#MarketTrends#Surveillance#TechIndustry
Отличный рапс — залог будущего урожая! ✅
➡️ Дата посева: 22 сентября
➡️ Ширина междурядья: 70 см
➡️ Предшественник: Нут
На сегодняшний день имеем хорошо развитые, сильные растения. Рапс полностью сформирован и готов к зимовке без лишних вмешательств.
Главный вывод из нашего опыта: мы НЕ БУДЕМ искусственно останавливать его вегетацию. Ранее такие попытки часто приносили больше вреда, чем пользы. Пусть культура входит в зиму естественно, согласно своим биоритмам.
Видео прилагаем — оцените состояние наших посевов! 👇
📢 Коллеги-агрономы, ваше мнение очень важно!
Как вы готовите озимый рапс к зиме?
Делаете ли ретардантную обработку осенью или полагаетесь на естественное развитие?
Какой, на ваш взгляд, лучший предшественник для рапса?
Делитесь своим опытом в комментариях! Обмен реальными практиками — это бесценно.
#Рапс#ОзимыйРапс#Рапс2025#Нут#Предшественник#ТехнологииПосева#Междурядье#ОсенниеПосевы#ПодготовкаКЗиме#ЗимовкаРапса#СельскоеХозяйство#Агроном#Агробизнес#Растениеводство#Полеводство#AgriTech#Фермер#АгроТехнологии#Опыт#Агро2025