Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Хэй гайз!
Большинство из вас проголосовало за обзор шоурумаCassina в Милане. Это один из самых значимых итальянских дизайн брендов.
Уже более 90 лет Кассина занимается мебельным ремеслом. Начинали они с производства столярки и кофейных столиков ☕ А в 1950-х годах сделали значимый переход от ремесленного производства к массовому и запустили промышленный дизайн в Италии 💪
Компания работает с такими A-list дизайнерами, как Филлип Старк, Пьеро Лиссони, Патриция Уркиола 🥇 А так же известна тем, что производит иконы великих мастеров модерна.
Кассина сочетает в себе технологии и многолетнее мастерство ремесленников. Кстати, именно они первые экспортировали италиан фёрничер в сша. С тех пор отметка #madeInItaly ассоциируется с качественным, модным и КРАСИВЫМ дизайном.
Креативность. Подлинность. История. Страсть. Честность. Отвага. Инновация. Это главные ценности компании. Советую посмотреть мини видео про них. Там картинки всех культовых дизайнов и веселая музыка))
#милан#дизайн#шоурум#milandesignweek
😎 LASH BOSS 😎 ЗДЕСЬ?
Стойте-ка, сейчас появится та самая, которая перевернет мир...
Ах, вот и она! Тушь VAMP! LASH EXTENDER!
🔥 Непревзойденный объем
🔥 Бесконечно длинные ресницы
🔥 Насыщенный черный
Как сильно вы хотите ее попробовать от 1 до 10? А кто уже?
#pupamilano#madeinitaly#vamplashextender#vampmascara
Пришло время обновить ваши ресницы
➡️
➡️
➡️VAMP! LASH EXTENDER
Тушь, которая формирует и приподнимает ваши ресницы в измерении 3D!
Отметьте вашу лучшую подругу, которой она тоже очень нужна!
#pupamilano#madeinitaly#vamplashextender#vampmascara
РУКОВОДСТВО ПО УХОДУ ЗА КОЖЕЙ ➡️ ANTI AGE
Следуйте нашим советам для достижения наилучшего результата!
ЦЕЛЬ: работа над разглаживанием морщин, тонусом и эластичностью кожи 💪
Нанесите на очищенную кожу серум ELASTIN SHOTS и крем TIMELESS PLUS, чтобы противодействовать признакам старения каждый день 😉
⚠️ Используйте уход NO AGE на коже вокруг глаз, нежно массируя для полного впитывания ⚠️
Отметьте вашу лучшую подругу, которая обязательно должна попробовать эти супер новинки!
#pupamilano#madeinitaly#skincare#pupapositivepeopleandplanet
УДЕЛИТЕ ВРЕМЯ, ЧТОБЫ СДЕЛАТЬ КОЖУ СЧАСТЛИВОЙ
💆🏻💆🏻💆🏻
Давайте вместе сделаем легкую зарядку для вашего лица!
Следуйте схеме, чтобы улучшить контуры лица и зарядиться хорошим настроением с утра 😉
🎵 С фоновой музыкой это будет намного веселее! Включите звук на этом видео и повторяйте последовательность действий 🎵
👉 Сохраните этот пост, чтобы тренироваться в любое время 💪
#pupamilano#madeinitaly#skincare#pupapositivepeopleandplanet
РУКОВОДСТВО ПО УХОДУ ЗА КОЖЕЙ 🧾
➡️УВЛАЖНЕНИЕ
Следуйте нашим рекомендациям для достижения наилучшего результата!
ЦЕЛЬ: глубокое увлажнение лица 💪
⚠️ Нанесите NO STRESS на область вокруг глаз, нежно массируя кожу с легким надавливанием.
⚠️ Воспользуйтесь увлажняющим действием гиалуроновой кислоты HYALU SHOTS, нанеся 3-4 капли сыворотки.
⚠️ Нанесите крем SKIN REHAB Prebiotic Moisturizing Cream для предотвращения старения кожи.
#pupamilano#madeinitaly#skincare#pupapositivepeopleandplanet
РУКОВОДСТВО ПО УХОДУ ЗА КОЖЕЙ ➡️ ДВОЙНОЕ ОЧИЩЕНИЕ
О чем мы говорим?
Двойное очищение — самый эффективный способ тщательно очистить кожу и избавить поры от загрязнений и макияжа, даже стойкого.
ЧТО ВАМ ПОНАДОБИТСЯ:
⚠️MOUSSE ME SOFTLY — очищающее средство текстуры мусса.
⚠️WAND ERASER — очищающее средство текстуры масло.
Мы готовы, а вы?
#pupamilano#madeinitaly#skincare#pupapositivepeopleandplanet
🇺🇿🇮🇹Ташкент встречает День Итальянского Дизайна – 2025!
☝Сегодня в Ташкенте состоялось знаковое событие – День Итальянского Дизайна – 2025, объединяющий традиции, инновации и креативность двух великих культур.
Посол Италии в Узбекистане Пьер Габриэль, а также другие представители итальянского и узбекского культурного сообщества приняли участие в этом мероприятии, подчеркивая глубину и силу узбекско-итальянского сотрудничества.
✨ Дизайн как мост между традициями и будущим
Итальянский дизайн всегда был больше, чем просто эстетика – это образ жизни, в котором элегантность сочетается с функциональностью, а инновации черпаются из наследия прошлого. Именно эта философия объединяет Италию и Узбекистан, страны, которые веками обменивались культурными, ремесленными и художественными традициями.
🔹 В знак уважения к узбекской культуре и ее выдающемуся ремесленному мастерству в рамках мероприятия состоялся уникальный показ: итальянские дизайнеры представили модели, созданные из узбекских тканей ручной работы. Это яркий пример того, как наследие древних мастеров находит свое отражение в современной высокой моде.
⚡Сегодняшний день стал не только торжеством эстетики, но и важным шагом на пути к укреплению узбекско-итальянского культурного сотрудничества. Эта встреча – символ того, что искусство и дизайн способны стирает границы и объединять народы.
Grazie, Uzbekistan! 🤍💙💚 Benvenuta, Italia! ❤️🤍💚
#ИтальянскийДизайн2025#UzbekistanItalia#КреативностьБезГраниц#MadeInItaly#УзбекскиеТрадиции
@bahodir_schastlivchik
ДОБРО ПОЖАЛОВАТЬ В TEDDYLAND 🐻
Согревающие ароматы, чувственные текстуры, интригующие сочетания.
Что еще можно пожелать от ухода? Ах да, милейшие пушистые косметички в подарок! 😎
Все подруги будут в восторге от таких подарков! А вы?
#pupamilano#madeinitaly#teddyland#pupaxmas#bathandbody
НОВАЯ НЕДЕЛЯ И НОВАЯ ПОРЦИЯ НОВИНОК 🧸
Нежнее нежного, мягче мягкого, пушистее пушистого!
Средства, о которым мы с вами давно мечтали, самые сладкие новинки для тела в коллекции TEDDYLAND!
🧸 теплые приятные ароматы
🧸 чувственные текстуры
🧸 невероятные эмоции при нанесении.
Хотите попробовать наши плюшевые новинки для тела? 🐻🐻🐻
#pupamilano#madeinitaly#teddyland#pupaxmas#bathandbody
ТРОПИКИ УЖЕ ЗДЕСЬ 🔥
Декабрь мчится, елки кругом, снегом всё замело, но в душе у нас цветут экзотические цветы и щебечут тропические птицы. Как так?
Наслаждайтесь с нами побегом в волшебные страны с палеткой PUPA PARROT
🦜 Уникальная палитра оттенков для нескучного макияжа глаз 🦜
Готовы на бьюти-эксперименты с нашими пташками?
#pupamilano#madeinitaly#pupaparrot#pupaxmas#unboxinghappines