Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Postrigay Gallery представила новую выставку работ художников-шестидесятников «Хрупкость вне времени».
«СУЩЕСТВУЕТ КРАСОТА НАСТОЛЬКО ХРУПКАЯ, НЕОПРЕДЕЛИМАЯ, ЭФЕМЕРНАЯ, ЧТО ОБЯЗАТЕЛЬНО ДОЛЖНА БЫТЬ ЗАКЛЮЧЕНА В ЖЕСТКУЮ РАМУ В ПРЯМОМ И ПЕРЕНОСНОМ СМЫСЛЕ - РАМУ ФОРМЫ, ИНАЧЕ ОНА УСКОЛЬЗНЕТ И ИСПАРИТСЯ, КАК ДРАГОЦЕННЫЕ ДУХИ ИЗ НЕЗАКРЫТОГО ФЛАКОНА» — Дмитрий Краснопевцев.
Магистральной идеей проекта становится то, что невзирая на сложный временной период смысл останется один — стремление художников создавать и выходить за рамки окружающей реальности даже в условиях неопределенности, держа фокус на том, что близко сердцу.
🗓️ 14 ноября - 01 февраля
⛳️ Cube.Moscow, ул. Тверская, 3
(здание отеля The Carlton, Moscow, – 2 этаж)
#галереялично#lichnogallery
#postrigaygallery#были_лично
Интересно, как сегодня художники переосмысляют связь человека и природы.
На выставке Postrigay gallery«Сад света» Маши Даниловской меня привлекло то, как она работает с границами. В ее живописи и керамике птицы и звери буквально растворяются в среде.
Концепция строится вокруг гипотезы Геи (Земля как единый организм), но без излишней дидактики. Особое впечатление оставляет серия «Острова». С одной стороны — это архетип потерянного рая, хрупкого и самодостаточного, с другой автор уходит от географии в чистую абстракцию, превращая остров в метафору внутреннего состояния.
Удивительной легкости и текучести первоначального рисунка на холсте Мария добивается создавая графику чернилами, переводя ее в цифровой коллаж и только затем она пишет маслом!
🗓️ до 24 мая
⛳️ул. Тверская, 3, -2 этаж
#были_лично#postrigaygallery
#машаданиловская#садсвета
Большой ивент прошел на прошедшей неделе в masters.
Postrigay gallery открыли новую выставку резидента галереи Анны Дёминой«Растворится в закате пение птиц». Абстрактные пейзажи будто погружают в другой мир, описывая переживания, связанные с соприкосновением природы.
Эмоционально, проникновенно!
🗓️ 22 октября - 16 декабря
⛳️ masters, Малый Патриарший пер, 5с1
#были_лично#аннадемина
#masters#postrigaygallery
Пропустили вчера открытие в Postrigay Gallery, где представили персональную выставку Надежды Ягофаровой «Зеркало дней».
Но вам от души рекомендуем, в экспозиции собраны сочные натюрморты и объекты, созданные художницей с 2020 года по настоящее время. Такие проекты помогают найти в повседневности что-то особенное, стоит просто остановиться.
🗓️ 20 февраля - 27 марта
⛳️Cube.Moscow, ул. Тверская, 3
#postrigaygallery#cubemoscow
#надеждаягофарова#зеркалодней
Так, с биографией Зубарева разобрались, теперь о главном — его теории времени. Художник видел время как живое пространство и выделял целых шесть его видов:
✔️Плоское время. Здесь всё повторяется в чётком ритме, создавая ощущение бесконечного калейдоскопа. То самое избыточное время.
✔️Изогнутое время. Пространство искривлено — реальность живёт по иным законам. Здесь совмещены разные координаты: временные, пространственные и эмоциональные. Некое искаженное время.
✔️Разорванное время. Время распадается на части, а участники событий существуют в разных ритмах. Картина становится визуальной метафорой разорванного времени.
✔️Реликтовое время. Это «протовремя» — холодное и безвоздушное. Оно просто присутствует, не участвуя в событиях, подобно поверхности древнего зеркала. Время до человека.
✔️Фактическое время. Самое человеческое из всех — настоящее, конкретное. Это время жизни, дыхания, того самого «здесь и сейчас».
✔️Световое время. Автономное время будущего, где остаётся только энергия и свет. Картина становится источником свечения, а время существует как чистая энергия.
P.S. Зубарев не просто рисовал — он создал целую философскую систему в красках. Теперь осталось определить, какое время вы чувствуете в своей жизни?!
#были_лично#postrigaygallery
#владиславзубарев#cubemoscow#раскрываявремя
Открываем для вас еще одного художника из плеяды нонконформистов. Вчера в Postrigay Gallery представили новую выставку — «Раскрывая время. Владислав Зубарев».
Этот художник был настоящим «арт-Штирлицем» — днем работал инженером, а ночью создавал смелое искусство. Участник знаменитой выставки в Манеже 1962 года, которую раскритиковал Хрущев, Зубарев прошел путь от студии «Новая реальность» до собственных экспериментов со временем. Его метод прост и гениален: он доверял интуиции, пытаясь сделать время видимым и осязаемым. Владислав не просто рисовал, а буквально «останавливал мгновение», что звучало бы безумно, если бы не было так здорово.
Так что эта выставка — отличный шанс открыть для себя имя, которое долго оставалось в тени, но точно заслуживает вашего внимания!
🗓️ до 21 января
⛳️ ул. Тверская, 3, -2 этаж
#были_лично#postrigaygallery
#владиславзубарев#cubemoscow#раскрываявремя
Вчера посвятили вечер Cube.Moscow, где галерея Postrigay провела открытие персональной выставки Кати Медведевой под названием«Таинство». Несмотря на почтенный возраст, 88-летняя художница лично присутствовала на вернисаже, что не может не вызывать восхищения и уважения к её преданности искусству.
Как отмечал Марк Шагал: «Катя Медведева — это чисто русский талант, она так же любит цвет, как и я». Живопись стала для художницы способом отстраниться от повседневных забот и возвыситься над ними. В своих работах Медведева преобразует непростые жизненные обстоятельства и личные трагедии в чистоту и свет — это и есть то самое «Таинство», к которому стремится автор.
Стоит заметить, что в начале весны в Cube.Moscow состоялось открытие 14-ти новых проектов. Для тех, кто еще не успел побывать — добавляем еще один повод к посещению арт-пространства.
🗓️ 1 апреля - 15 июня
⛳️ ул. Тверская, 3 (-2 этаж)
#были_лично#postrigaygallery
#катямедведева#таинство
#cubemoscow