Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚨🇮🇳 TCS Halts Operations in Nashik Amid Ongoing Probe
Tata Consultancy Services (TCS) has shut operations in Nashik, halted fresh hiring, and instructed employees not to report to the office until the probe concludes. #IT
‼️IT-компании в России начали останавливать работу из-за войны Минцифры с VPN, пишет канал
«Время госзакупок»
со ссылкой на источник
в отрасли.
По его словам, крупные компании всё ещё зависят от senior-специалистов, находящихся за рубежом, но из-за борьбы c VPN работать с этими специалистами становится трудно.
В результате остановка проектов может замедлить перевод критической инфраструктуры и госкомпаний на отечественное ПО.
Также под угрозой оказались и отдельные госконтракты, поскольку часть
IT-подрядчиков уже остановила работу до прояснения ситуации с VPN.
#IT
tldr для азербайджанских пользователей: с 1 сентября ФСБ сможет в свободном режиме 24/7 получать информацию о любом пользователе uber и yango в том числе и в Азербайджане
https://t.me/meduzalive/89341
Не прошло и двух часов с выхода статьи, а Финляндия уже выпустила срочное распоряжение о приостановке передачи в Россию любых персональных данных клиентов. Наверное, в самое ближайшее время компанию забанят как и в Латвии год назад. Вот это реальная борьба государства с иностранным влиянием, а не как у некоторых - закрытые третий год границы по надуманным причинам
https://t.me/meduzalive/89345
#it
🇦🇿🇪🇪Новость получила развитие - начали не только предлагать релокейт в Баку гражданам РФ и РБ, которые уже получили оффер и не успели получить эстонскую визу, но и открывать новые вакансии.
Но пока не очень быстро идёт процесс - всего лишь 1 вакансия, но будем надеяться, что вода камень точит.
Из интересных вещей по данной теме - бывшие коллеги рассказали слухи, почему одна из лучших российских компаний - JetBrains предпочла Кипр Турции, когда решила закрывать офисы в России. Вроде как они вели переговоры с местной бюрократией, и на одном уровне им сказали, мол забейте на правило 4 работника турка на одного иностранца - договоримся как-нибудь. А на другом уровне бюрократии им уже ответили, мол нет, закон един для всех - исключений не будет. Не знаю насколько это правда - за что купил, за то и продаю.
#it
📈IT растет, но без зарплатного оптимизма
По данным HeadHunter, в 2025 году структура рынка труда в целом сохранилась: основной спрос по-прежнему сосредоточен в Алматы и Астане.
Несмотря на общее снижение количества вакансий на портале на 4,7%, IT показал мощный прирост +11,9% — это 4-е место по динамике. Что касается резюме, их количество увеличилось лишь на 2,3%, и спрос со стороны работодателей продолжает опережать предложение
При этом медианная зарплата в отрасли составила 268 994 тенге, снизившись на 7,6% по сравнению с прошлым годом.
#IT
@sandyq_orda — цифровизация Казахстана в деталях