Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Эстетика сине-белой вазы.
Слева: казахский дизайнер Aya Bapani
Справа: Бренд из Катара TIIYA SS 2021👏👏
"Фарфоровые куклы" рассказывают историю о Великом Шёлковом Пути и о том, как бело-синяя керамика соединяет культуры.
Бренд создал фотосессию, в которой соединил разные виды искусства.
#comparativefashion
Мода и переосмысление своего прошлого.
Армения ↔️ Карелия и космическая связь идей и людей.
Стилизованные папахи и аутентичное кружево (фото 1 - 3) получили неожиданную интерпретацию в новой коллекции весна-2024 бренда Mariko: источником вдохновения для Мари Айрапетян стала культура и природа ее родного села Хнацах в Армении.
А для участника нашего проекта Виктории Устиновой таким вдохновением стала её родина - Карелия (фото 4 - 6)
В 2014 году на фестивале IBEFF ETNOMODA была представлена её коллекция с одноименным названием.
Карельские легенды и пудожские вышивки дали творческий импульс Виктории для создания шляп, удивительным образом напоминающим "папахи" Мари Айрапетян.
📷 образы из коллекции "Карелия" (2014, Etnomoda); весна-2024 Mariko
#comparativefashion#ассоциации
Гуси-лебеди и народный фольклор 🦆🪿🦢 в моде:
Образы водоплавающих птиц - уток, гусей и лебедей - играют в фольклорной традиции исключительную роль. Однако, их можно встретить и на подиуме высокой моды.
В коллекции Burberry 2023 года появился принт с утками и головной убор в виде селезня.
Дэниэл Ли вдохновлялся британскими парками, в которых часто можно встретить этих очаровательных птиц.
Иная интерпретация образа была представлена Татьяной Коваленко на нашем фестивале IBEFF ETNOMODA в 2013 году.
Дизайнер стремилась углубиться в функциональные качества народного костюма и создать не только выразительную, но и функциональную форму. Об уточке напоминает овальный силуэт моделей, а также принт в виде стилизованных уточек.
📷 образы из коллекций "Уточка" (2013, Etnomoda);
Burberry (осень-зима 2023)
#ассоциации#comparativefashion
Образ от KENZO (слева) и аллюзия к творчеству Kenzo Takada (справа) из коллекции конкурсанта IBEFF ETNOMODA, Дарьи Безруковой.
*Фото Игоря Евдокимова на показе @etnomoda 2014
#comparativefashion#ассоциации
"Бедуины" на подиуме.
Восточный колорит, эхо "Дюны" и в то же время ультра современные тренды.
Rick Owens #SS2024#PFW
📹 Lorre Rodkin
Для разнообразия добавили в подборку образ участника нашего показа 2018 года из коллекции
"Космос.Черная дыра".
Театр моды "мАрт"
#ассоциации#comparativefashion
Наша рубрика #Ассоциации
Участница нашего конкурса #ibeff_online2023 Евгения Семерок с кампейном коллекции "Узор"
и #показ Fendi Fall/Winter 2019/2020.
Что общего у аутентичных готических образов нашей участницы и образов из последней коллекции Карла Лагерфельда для Fendi?
На наш взгляд, их объединяет общее настроение.
Чёрный цвет - всегда беспроигрышный вариант! Особенно, если он в тандеме с роскошным кружевом или орнаментом!
#Этномода#comparativefashion
✨ Дорогие подписчики, в нашем канале регулярно выходят материалы из различных рубрик, ориентироваться в которых вам помогут хештеги.
Вот некоторые из них:
🔹#nationaltrend -
мотивы национальных культур в современных модных коллекциях
🔹#catwalk -
Фото с подиумов - следите за модными показами и узнавайте об интересных коллекциях с этно мотивами.
🔹#fashionweek -
оставайтесь в курсе самых громких модных событий с мировых Недель Моды.
🔹#comparativefashion + #ассоциации – схожести, различия и аллюзии.
Что объединяет образы дизайнеров с разных уголков света?
🔹#discoveringtalents - открывайте новые имена в мире моды и следите за молодыми талантами, которые обращаются к фольклору за вдохновением.
🔹#этнофьюжн - сочетание в одной коллекции отголосков нескольких национальных культур