Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🖼Бесплатная выставка «Крошечная пустошь»
Миниатюрный мир Петера Чаквари завоевал популярность во всём мире 🌍. Его проект Tiny Wasteland — это фотографии в масштабе 1:87, где крошечные фигурки оказываются в самых неожиданных ситуациях.
Здесь дайвер плавает в банке с солёными огурцами, пожарные тушат острую паприку 🌶, а теннисисты играют на поле из кухонной губки 🧽. Чаквари уже создал более 200 таких работ, и каждая из них заставляет улыбнуться и посмотреть на привычные вещи под новым углом.
✨ Это выставка, где юмор, гротеск и фантазия сливаются воедино, превращая повседневность в яркое приключение.
📍 Артмуза, 13-я линия В.О., д. 70
📆 24 сентября — 24 ноября, ежедневно 11:00 — 22:00
💸 Вход свободный
#артмуза#выставкаспб#бесплатновспб#кудасходитьспб#искусствоспб#современноеикусство#spbfree
Где провести вечер? Что посмотреть? Все ответы — в Куда сходить в Санкт-Петербурге.
🌕Полное лунное затмение над Петербургом!
Уже в воскресенье, 7 сентября, жители города смогут наблюдать редкое астрономическое явление — полное лунное затмение. 🌌
✨ Детали:
🔭 Луна будет находиться в тени Земли 1 час 22 минуты
🌑 Пик затмения — 21:12 (мск)
🔴 В это время Луна приобретает загадочный красноватый оттенок
Не забудьте загадать желание, когда увидите «кровавую Луну»!
#ЛунноеЗатмение#АстрономияСПб#НебоСПб#СобытияСПб#КудаПойтиСПб#SaintPetersburg#SPBfree
От закатов до спектаклей — рассказываем, где побывать. Куда сходить в Санкт-Петербурге — твой городской гид.
🎨Бесплатная галерея с яркими картинами, где искусство живёт в цвете и настроении!
Русско-американский художник Дмитрий Стрижов — мастер, чьи работы экспонировались в лучших галереях Нью-Йорка. После 15 лет за океаном он вернулся в Петербург и открыл школу-галерею PLOSKOSTI, где делится опытом и вдохновением с молодыми художниками 🎨
Его картины невозможно спутать с другими — яркие краски, узнаваемые персонажи и мощная энергия, будто сошедшая со стены. Сейчас в галерее проходит выставка «Искушение самурая» — про внутреннюю силу, путь и гармонию.
📍 ул. Радищева, 42
⏰ Пн–Вс 12:00–21:00
💵 Вход свободный
#галереяспб#искусствоспб#питербесплатно#бесплатноспб#афишаспб#кудасходитьспб#spbfree#spbevent#гуляембесплатнопитер#артспб
Где провести вечер? Что посмотреть? Все ответы — в Куда сходить в Санкт-Петербурге.
🌌Quantum Pulse: 80 голубых лучей над Петербургом
На стрелке Васильевского острова зажигается необыкновенное световое шоу: 80 голубых прожекторов пронзают небо ✨.
Инсталляция Quantum Pulse посвящена 80-летию атомной промышленности СССР и России и превращает город в центр притяжения света и энергии.
📍 Стрелка Васильевского острова
📆 27 и 28 сентября
🕗 20:00–22:00
📸 Фото: @paveldemichev
#quantumpulse#светспб#артспб#кудасходитьспб#бесплатноспб#стрелкавасильевского#spbafisha#spbfree
Петербург ближе, чем кажется — будь в курсе интересного с Куда сходить в Санкт-Петербурге.
🌍Бесплатный день в музее почвоведения!
Каждый последний вторник месяца — день бесплатного посещения Центрального музея почвоведения им. В.В. Докучаева.
Ближайшая дата — 28 октября🗓
Это уникальное место, где можно увидеть почвенные монолиты — вертикальные срезы почвы с полностью сохранённым строением. Здесь собрана богатейшая коллекция образцов со всех уголков планеты, от арктических земель до тропиков.
Если вы любите науку, природу и необычные музеи — это отличный повод заглянуть сюда! 🌱
📍 Биржевой проезд, 6
💵 Вход свободный (28 октября)
#музеиспб#бесплатноспб#афишаспб#интересноспб#кудасходитьспб#гуляембесплатнопитер#spbfree#spbmuseum#экологияспб
Город оживает каждый день — подписывайся на Куда сходить в Санкт-Петербурге и не пропускай главное!
✨Спас на Крови — одно из лучших мест для вечерней прогулки и фотосессии.
Когда загорается подсветка и огни отражаются в водах канала Грибоедова, храм выглядит особенно сказочно. Атмосфера старого Петербурга, тихие набережные и величественный силуэт собора делают это место идеальным для романтической прогулки или атмосферных снимков.
Только посмотрите, какой красивый снимок получился у создателя нашего телеграм-канала😍
📍 Набережная канала Грибоедова, 2Б
📸 andrei_mikhailov, а также
📸 aleksandr_paklin
#СпасНаКрови#ВечернийПитер#ПрогулкиПоПетербургу#ФотосессияСПб#КрасотыСПб#SaintPetersburg#SPBfree
От закатов до спектаклей — рассказываем, где побывать. Куда сходить в Санкт-Петербурге — твой городской гид.
✨Спас на Крови — одно из лучших мест для вечерней прогулки и фотосессии.
Когда загорается подсветка и огни отражаются в водах канала Грибоедова, храм выглядит особенно сказочно. Атмосфера старого Петербурга, тихие набережные и величественный силуэт собора делают это место идеальным для романтической прогулки или атмосферных снимков.
Только посмотрите, какой красивый снимок получился у создателя нашего телеграм-канала😍
📍 Набережная канала Грибоедова, 2Б
📸 andrei_mikhailov, а также
📸 aleksandr_paklin
#СпасНаКрови#ВечернийПитер#ПрогулкиПоПетербургу#ФотосессияСПб#КрасотыСПб#SaintPetersburg#SPBfree
От закатов до спектаклей — рассказываем, где побывать. Куда сходить в Санкт-Петербурге — твой городской гид.
🤗 Сообщаем заранее!!!
🎶Бесплатный концерт «Императорский полдень»
Каждое воскресенье ровно в полдень в Петербурге оживает старинная музыкальная традиция. В окно Капеллы, выходящее на Дворцовую площадь, появляются музыканты и дарят горожанам и гостям города короткий, но яркий концерт.
Эта традиция берёт начало ещё со времён Петра Великого, когда музыка звучала не только в залах, но и на улицах города, создавая особую атмосферу праздника.
📍 Двор Капеллы, наб. реки Мойки, 20
📆 Ближайшее выступление: 21 сентября в 12:00
🎟 Вход свободный
#капелласпб#императорскийполдень#музыкавпитере#бесплатноконцерт#spbfree#бесплатноспб#культураспб#дворцоваяплощадь
Где провести вечер? Что посмотреть? Все ответы — в Куда сходить в Санкт-Петербурге.
📸Прогулка и фотосессия у Троицкого моста
Троицкий мост — один из самых красивых мостов Петербурга, соединяющий сердце города с Петроградской стороной. Его ажурные фонари и изысканные детали делают прогулку особенно атмосферной.
🌅 Здесь открывается потрясающий вид на Петропавловскую крепость, стрелку Васильевского острова и Дворцовую набережную. Вечером огни моста и отражения в Неве создают волшебную картину, которую хочется сохранить на фото.
💡 Отличное место для романтической прогулки, атмосферной фотосессии или просто неспешного наслаждения красотой города.
📸 andrei_mikhailov
#троицкиймост#мостыспб#фотосессияспб#прогулкиспб#красотыпитера#spbfree#питерфото#питер
Город оживает каждый день — подписывайся на Куда сходить в Санкт-Петербурге и не пропускай главное!
🎨Бесплатная стрит-арт выставка — праздник уличного искусства в галерее!
В галерее «Сегоднязавтра» открылась финальная выставка цикла «Рисунки на стенах», посвящённая теме праздника 🎉
Проект объединяет лучших уличных художников Петербурга, чьи работы давно вышли за рамки улиц и стали частью современного искусства.
В экспозиции — живопись, графика, мозаика, арт-объекты и уникальные произведения из личной коллекции куратора. Выставка показывает, как уличное искусство сохраняет свою энергию и дух свободы, даже попадая в галерейное пространство 🌆
📍 Чкаловский проспект, 60
⏰ Вт–Сб 11:00–19:00, до 10 ноября
💵 Вход свободный
#стритартспб#современноеискусствоспб#бесплатноспб#галереяспб#афишаспб#artspb#spbfree#кудасходитьспб#спббесплатно#гуляембесплатнопитер
Планы на вечер? Они уже ждут тебя в Куда сходить в Санкт-Петербурге.
🎶 Фестиваль «Русский двор» в Петербурге!
13 сентября Муринский парк превратится в пространство народного творчества и фольклорного веселья. На фестивале «Русский двор», который проходит в рамках проекта «Дух времени», гостей ждёт атмосфера старинных традиций и душевного праздника.
✨ В программе:
🪕 Выступления народных вокальных и хореографических коллективов
🎭 Задорные игры и ярмарочные забавы
📸 Фотозона в русском стиле
🎨 Мастер-классы
👘 Этноколлекции
📍 Муринский парк
📆 13 сентября, 12:00–18:00
💸 Вход свободный
#РусскийДвор#ДухВремени#ФестивальСПб#КультураСПб#НародноеТворчество#ФольклорСПб#КудаПойтиСПб#SaintPetersburg#SPBfree
Живи активно: культура, еда, события — всё в одном месте. Куда сходить в Санкт-Петербурге.
🎭«Ночь искусств» в Петербурге — когда город не спит ради культуры!
3 ноября Северная столица вновь присоединится к всероссийской акции «Ночь искусств»💫
⠀
Это особенный вечер, когда музеи, театры, библиотеки и арт-пространства открывают свои двери для всех, кто хочет провести ночь в компании музыки, выставок, спектаклей и мастер-классов.
⠀
Тема этого года — единство культур народов России🇷🇺. Петербуржцев и гостей города ждут десятки бесплатных мероприятий, где искусство объединяет, вдохновляет и дарит новые впечатления.
📍 Музеи, театры и библиотеки по всему Петербургу
📆 3 ноября
🎟️ Вход свободный (по регистрации в некоторых местах)
#ночьискусств#спбсобытия#бесплатноспб#культураспб#питербесплатно#афишаспб#spbfree#spbevent#spbguide#гуляембесплатнопитер
Где провести вечер? Что посмотреть? Все ответы — в Куда сходить в Санкт-Петербурге.