Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Вьетнамцы устанавливают алтари для поклонения духам в офисах, чтобы с помощью традиционной магии повысить прибыльность бизнеса. Есть такое сакральное место и в «Ханой-Москва». Алтарь размещен в деревянном коробе с резными орнаментами — драконами, листьями и солярными символами. Он стоит на полу в месте, указанном мастером фэн-шуй, игнорируя удобство интерьера и симметрию.
Внутри короба — фарфоровые идолы, подставка с пятью стопками для алкоголя и блюдце для подношений (сигареты, ритуальные деньги, конфеты). Снаружи — курильница с ароматными палочками, поднос с фруктами и ваза с хризантемами. Ночью алтарь подсвечивают красными лампами.
Ежедневно специальный сотрудник проводит церемонию: подносит свежие фрукты, цветы и зажигает палочку. Расходы на алтарь никогда не сокращают, даже в кризис — это считается святотатством. В особые дни по лунно-солнечному календарю организуют расширенные ритуалы с участием владельца.
Для вьетнамцев важно поддерживать отношения с духами, демонами и призраками, соблюдая множество правил и исключений, подобно земным законам.
#ханоймосква#ханой#hanoimoscow#hanoi
Банкомат Азиатско-Тихоокеанского банка установили в ТЦ «Ханой-Москва» на -1 этаже рядом с супермаркетом «Пятерочка». Машина оснащена модулями выдачи и приема наличных, они предоставляют возможность осуществления платежей и подписки на дистанционное банковское обслуживание. По сути, он являются мини-офисом банка, позволяющими оказывать широкий спектр услуг клиентам - держателям карт международных платежных систем, а также всем покупателям.
✅Где: ТЦ «Ханой-Москва», - 1 этаж (рядом с супермаркетом «Пятерочка»)
Справка:
Азиатско-Тихоокеанский банк – один из крупнейших банков Дальнего Востока и Сибири с мультирегиональной сетью, работает на российском рынке с 1992 года.
АТБ обслуживает более 305 000 розничных и 30 000 корпоративных клиентов. Сеть банка охватывает 22 региона России. Головные офисы расположены в Благовещенске и Москве. В банке работает более 3 700 сотрудников. Чистые активы АТБ составляют 334,5 млрд рублей.
*Информационный пост, не является рекламой
#ханоймосква#ханой#hanoimoscow#hanoi
В Ханой-Москва стартовал традиционный пятничный КВИЗ, сегодня он проходит под грифом Новогодний! Команды пришли в традиционных праздничных нарядах и с роскошном настроением.
#ханоймосква#ханой#тцханоймосква#hanoimoscow#hanoi
А ещё в торговом центре установлена тематическая фотозона, на которой любой гость Ханой-Москва может запечатлеть себя на память 👻
#ханоймосква#ханой#тцханоймосква#hanoimoscow#hanoi#hanoimoscow
В Ханой-Москва стартовал традиционный пятничный КВИЗ ❤️ Команды начали сражение в интеллектуальной схватке! Пусть победят сильнейшие🤞
#ханоймосква ханой #тцханоймосква#hanoimoscow#hanoi#moscow
Злая, но красивая, ведьма украла таланты у артистов Цирка чудес, но маленькие гости Ханой-Москва помогут их вернуть!
#ханоймосква#тцханоймосква#hanoimoscow#hanoi#moscow
В Ханой-Москва стартовал традиционный пятничный КВИЗ, сегодня с приставкой РОК🤟 Желаем всем командам удачи и пусть победит сильнейший 🫶🫰
#ханоймосква#тцханоймосква#hanoimoscow#hanoi#moscow
А ещё в Ханой-Москва всегда можно нарисовать сакральный рисунок хной - мехенди, зашифровав послание ко Вселенной. Стоимость от 350 рублей.
#ханоймосква#тцханоймосква#hanoimoscow#hanoi#moscow
В Ханой-Москва пришла старая-добрая сказка! Малыши смотрят кукольный спектакль "Волк и семеро козлят" и находятся в предвкушение встречи с Бабой Ягой.
#ханоймосква#hanoimoscow#hanoi#moscow#ханой
Очаровательная Баба Яга приехала в Ханой-Москва, чтобы сварить волшебное зелье! Следим за магией 😍
#ханоймосква#ханой#тцханоймосква#hanoimoscow#hanoi#moscow
Параллельно шоу-программы "В гостях у сказки" маленьким гостям торгового центра наносят аэротату😍
#ханоймосква#ханой#тцханоймосква#hanoimoscow#hanoi#moscow