Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Рубрика: туристическое направление недели👇
В самом сердце Гватемалы, всего в 30 минутах от столицы, скрывается место, где природа будто замедляет время. Озеро Аматитлан — тёплый бирюзовый водоём, рождённый в древнем вулканическом кратере и окружённый лёгким паром геотермальных источников.
Здесь вулканы Пакая и Агуакате встречаются с мягкими туманами и спокойной гладью воды — идеальная сцена для отдыха и наблюдения за природой.
Почему Аматитлан особенный
✨Озеро, которое “дышит”
Над поверхностью почти всегда поднимается тонкий туман — результат вулканической активности. Местные называют это «дыханием земли» и считают озеро энергетическим местом силы.
✨Сакральное пространство майя
Для древних майя Аматитлан был местом очищения: здесь проводили ритуальные омовения и благодарения духам природы. Атмосферу священности озеро сохраняет до сих пор.
✨Горячие источники — природный SPA
Вода богата минералами и серой, а температура в отдельных зонах достигает 40°C. Эти природные «ванны» используют уже сотни лет — от отдыха до лечебных процедур.
✨Озеро “в огненном треугольнике”
Сразу несколько действующих вулканов создают уникальные пейзажи. Особенно впечатляет Пакая, который часто дымится — и выглядит невероятно на закате.
✨Легенда о затонувшем городе
Говорят, что в глубине озера скрывается древнее поселение, и в самые прозрачные дни его очертания можно разглядеть. Это делает место популярным среди любителей мифов и подводных исследований.
Что попробовать на Аматитлане
🔹каякинг по тёплой воде, окружённой паром
🔹купание в природных горячих бассейнах
🔹трекинг на смотровые площадки с видом на Пакая
🔹вулканические SPA-сеансы
🔹ранние рассветы — тишина, туман и огненный вулкан вдали
Это одно из тех мест, где природа ощущается физически — в тепле воды, в запахе минералов, в лёгком дыме над горизонтом.
Озеро сочетает мистику майя, спокойствие тропиков и силу вулканов, превращаясь в пространство, где можно расслабиться, восстановиться и буквально вдохнуть вулканическую энергию Гватемалы.
#Guatemala#Amatitlan#TurismoLatAm#TravelLATAM#ПриродаЛатАм
#ТурнаправлениеЛАТАМ#Туризм
👉Всегда свежие новости о странах Латинской Америки!
Рубрика: Вдохновение ✨
Река, которая не нуждается в фильтрах — Caño Cristales, Колумбия
Представьте себе реку, в которой сочетаются оттенки красного, жёлтого, зелёного, синего и чёрного. Нет, это не магия и не монтаж — это Caño Cristales, знаменитая "река пяти цветов", спрятанная в глубинах колумбийских джунглей в регионе Сьерра-де-ла-Макарена.
Уникальные цвета реки создаёт водное растение Macarenia clavigera, которое окрашивается в яркие тона в зависимости от времени года и интенсивности солнечного света. Особенно зрелищной река становится с июля по ноябрь, когда течение идеально чистое, а растения окрашиваются в пылающе-красные и малиновые оттенки.
Здесь вы найдёте скальные образования, водопады, натуральные бассейны и пейзажи, которые кажутся инопланетными.
Ранее регион был закрыт для туристов из-за охраны природы, но сегодня Caño Cristales можно посетить с местными гидами в рамках экологического туризма.
Это не просто река — это природное произведение искусства, которое считается одним из самых красивых водоёмов в мире и настоящей гордостью Колумбии.
#CañoCristales#Колумбия#ПриродныеЧудеса#Путешествия#ЛатинскаяАмерика#Экотуризм#РекаПятиЦветов#TravelLatAm#НевероятнаяПрирода#SouthAmericaMagic
👉Всегда свежие новости о странах Латинской Америки!
VidantaWorld запускает LUDŌ — первый в Латинской Америке иммерсивный водный спектакль!
📍Нуэво-Вальярта, Мексика 🇲🇽
Один из самых амбициозных парков развлечений региона — VidantaWorld — официально анонсировал шоу LUDŌ (Cirque du Soleil), которое станет первым в Латинской Америке постоянным иммерсивным водным спектаклем.
Это не просто шоу, а настоящее зрелище нового поколения, созданное с применением прорывных технологий в визуальных эффектах, световом дизайне, проекциях и водной хореографии.
О чём шоу?
LUDŌ переносит зрителей в фантастический мир, где вода становится сценой для эпических историй, мифов и визуальных чудес. Постановка задействует акробатов, танцоров, цирковых артистов, а сценография меняется прямо на глазах благодаря динамической архитектуре арены.
Vidanta отмечает, что LUDŌ — не просто развлечение, а часть стратегии по превращению Нуэво-Вальярта в мировую столицу тематического туризма.
Над созданием шоу работала международная команда режиссёров, художников и техников, в том числе из Канады, Франции и Бразилии.
Технические особенности
- Водоём с системой подводных подъемников
- 360-градусная арена без барьеров между зрителями и действием
- Иммерсивные эффекты: туман, свет, звук, проекции
- Экологичные технологии подачи воды и энергии
Открытие шоу запланировано уже на ближайшие месяцы, а билеты будут доступны через официальную платформу Vidanta. В будущем LUDŌ планируют дополнить кулинарными и музыкальными шоу в рамках мультиформатной развлекательной зоны.
#VidantaWorld#LUDO#НуэвоВальярта#ИммерсивныйТеатр#ЛатинскаяАмерика#ВодноеШоу#ШоуLUDO#ТуризмМексики#КультурныйТуризм#Развлечения2025#TravelLatam
👉Всегда свежие новости о странах Латинской Америки!