Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Мыльные пузыри, парящие в невесомости или...
самые завораживающие светильники? 💡
Хэй гайз! ✌️
Делюсь с вами дизайн находками из Милана! Знаю, #milandesignweek был еще в апреле, ноооо итс нэвер ту лэйт, когда речь идёт о красивом освещении 😏
Эти светильники из коллекции FOCUS созданы дизайнером Юджи Окитсу для DCW éditions.
Лёгкие линзы из оргстекла подвешены к потолку. Они мягко качаются и вращаются вокруг своей оси, постоянно меняя восприятие пространства.
Удивительная игра со светом! Эти прозрачные и чуть выпуклые диски захватывают и рассеивают его. В то же время обрамляя окружающий пейзаж, создавая несколько плавающих миров, встроенных в круги света.
#Милан#выставка#SaloneDelMobile#Euroluce#светодизайн
P.s. Переходите в инст! У меня есть ещё парочка классных рилсов с топ дизайном 😉
Хэй гайз!
Перемещаемся на главный ивент недели дизайна — Salone del Mobile! Представьте: 200 000+ квадратных метров мебели, света и инноваций, 2300+ брендов и толпы дизайнеров со всего мира 🫶
Чтобы обойти все павильоны, потребуется не одна неделя! Лайфхак: никаких туфель — только шпильки кроссы 👟
Это уже мой четвёртый раз здесь... слегка переживала, что не увижу ничего нового. Но! Дико ошибалась)) Нашла много новых брендов, а топовые компании порадовали свежими коллекциями 😀
Каждые два года здесь проходит биеннале света Euroluce — с него и начнём! Не пропустите следующие посты!!! 🌶️🌶️🌶️
#Милан#неделяДизайна#MilanDesignWeek#SaloneDelMobile#Euroluce#свет
Хэй гайз!
Продолжаю делиться впечатлениями с Euroluce — и вот мой абсолютный фаворит этого года...
Aqua Creations! 🤍
Впервые увидела их работы — будто попала в страну чудес! 🐈⬛ Летающие тарелки, светящиеся луковицы, пушистые грибочки (или медузы?), кресла-мозги... Дизайн, вдохновлённый природой - это настоящая магия игры света и формы🍄
Основал бренд израильский фотограф Альби Серати вместе с женой-скульптором еще в 1992ом году. Альби с детства заворожён игрой света — сначала в фотографии, потом в дизайне 😍Его работы — не просто функциональные вещи, а эмоций!
■ Как думаете: какие чувства должен пробуждать хороший дизайн?
#Милан#Свет#MilanDesignWeek#MDW2025#Euroluce#SaloneDelMobile#aquaCreations
Хэй гайз!
Возвращаемся в Милан на неделю дизайна... о да! Контентом оттуда я буду делиться ещё долго. Этого вдохновения хватит на целый год))
Уже рассказала вам про два топовых бренда освещения — Ingo Maurer и Aqua Creations. Сегодня делюсь ещё одним фаворитом с выставки Euroluce – мексиканским David Pompa.
■ В основе их философии — глубокая связь с природой, традиционными ремёслами и принципами устойчивого развития🌎
Каждый светильник начинается с материала. Чёрная глина, вулканический камень, плетёная пальма, переработанное стекло... всё добывается и обрабатывается с уважением к природе и местным сообществам ❤️ Можно на пару часов залипнуть на сайте, изучая историю каждого материала - советую заглянуть хотя бы ради завораживающих фотографий с ремесленниками 📸
Бренд сознательно избегает машинной безупречности — здесь ценят следы человеческих рук, естественные неровности и живые текстуры🖐 Тем не менее за кажущейся простотой скрываются инновационные технологии - смотрите первое видео!
■ Идеальный баланс между мексиканскими традициями и современным дизайном 🌜 Как вам такой подход?)
#Милан#milanDesignWeek#mdw2025#DavidPompa#Euroluce#свет#устойчивоеразвитие
Euroluce 2025! Погнали!!!
Перед посещением друзья дали мне забавное задание — найти на выставке серфингистов📷 Задача оказалась не из простых! Вместо ожидаемых длинноволосых голубоглазых блондинов мне попадались исключительно темноволосые итальянцы 🤭
И вот, прохожу очередной корнер со светом — стенд мюнхенского Ingo Maurer. Вижу толпу, которая что-то внимательно разглядывает и не спешит расходиться 🙂 Подхожу ближе... и вот они!!!
Внутри светящейся стеклянной трубы, на прозрачных волнах — крошечные серфингисты! 🗿 Прикол!
Ingo Maurer — одни из самых оригинальных в мире света! Ребята делают не просто светильники, а соединяют искусство, handcraft, юмор и креатив!
Мои фавориты — на фото. Особенно люблю люстру с листочками, на которых можно оставить секретное послание 🛩️
■ Какой из этих светильников поселился бы у вас дома?
#Милан#неделяДизайна#milanDesignWeek#saloneDelMobile#Euroluce#IngoMaurer#MDW2025
Хэй гайз!
Эти бренды освещения — must-know для всех ценителей дизайна!🔴
● VIBIA
Знамениты своими модульными светильниками Plusminus. В этом году представили ещё одну серию "конструктора"...
Но мой фаворит — новенький Oko (1)! Его эксклюзивно показали на Euroluce, а в продажу он поступит только в следующем году... ждём 🗒 :) На фото свет кажется чуть резковатым, но в жизни даёт удивительно мягкое цветное свечение — идеально для вечернего акцентного освещения! 🌕
И конечно, обратите внимание на серию с ниточками Array (2). 🪡❤️ Уже несколько лет не перестаю ей любоваться. Руки тянутся провести пальчиками по нитям, словно по арфе... а сотрудники трогать не разрешают))
● ARTEMIDE
Короли коллабораций! Работают со всеми топовыми архитекторами — от Herzog & de Meuron до Бьярке Ингельса. Их проекты – мост между архитектурой и светодизайном💯
В этом году было множество новинок! Мне больше всего понравились: Alambicco (3), демонстрирующий искусство выдувного стекла, и Boltons (4) — футуристичная зеркальная тарелка в сочетании со стеклянным основанием и дутым шариком внутри создают интересные оптические иллюзии. Кстати, у следующего бренда есть нечто похожее...
● DAVIDE GROPPI
Их стиль — лаконичность в чистом виде. Визитная карточка — светильники с отражённым светом.
Настоящая магия – стеклянные трубы... модель так и называется Magia! Как они устроены — смотрите в конце видео (10).
😍 Ну а я похоже фанат летающих тарелок и полупрозрачных настольных светильников! В полном восторге от Vis-à-vis (9).
■ Какая версия вам нравится больше — у Artemide (4) или Davide Groppi (9)?
■ Успела посетить павильоны всех световых гигантов на Euroluce... кроме одного! Угадаете, какого?)) Подсказка: первая буква F!
#Милан#MilanDesignWeek#MDW2025#Euroluce#Свет#Vibia#Artemide#DavideGroppi