Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Музыкальные новости Латинской Америки
1️⃣ Farruko и Eddy Lover — Ay Dale
Farruko и панамский артист Eddy Lover представили совместный сингл Ay Dale. Трек сочетает гипнотический регги, реггетон и прибрежную перкуссию, создавая динамичное и танцевальное звучание.
Песня рассказывает об игре соблазна — флирте, намёках и эмоциях без обещанного продолжения. Записанный в Панаме трек подчёркивает свободу самовыражения и универсальность латиноамериканской музыки.
Релиз вышел на фоне номинации Farruko на Premio Lo Nuestro за хит Cables Cruzados.
2️⃣ Arcángel — альбом La 8va Maravilla
Arcángel выпустил альбом La 8va Maravilla, посвящённый личному перерождению и 20-летию карьеры.
Пластинка из 20 треков наполнена размышлениями о времени, утрате, зрелости и внутреннем росте. Среди гостей — Ricky Martin, Daddy Yankee, Sech, Beéle, Grupo Firme и сын артиста Austin San.
Альбом стал отражением сложного жизненного этапа: проблем со здоровьем, потерь в семье и переосмысления ценностей.
3️⃣ Manuel Turizo — Por Un Pendejo No Se Llora
Manuel Turizo выпустил новый сингл Por Un Pendejo No Se Llora— бочату о расставании, самоуважении и умении отпустить прошлое.
Трек звучит как поддержка для тех, кто переживает разрыв: меньше драмы, больше любви к себе и движения вперёд.
4️⃣ Yandel & Latin Mafia — Como Es Que Se Hace
Yandel объединился с мексиканской инди-группой Latin Mafia в треке Como Es Que Se Hace.
Композиция уходит от привычного реггетона и смешивает hip-hop, R&B и indie pop с цепляющими мелодиями. Песня войдёт в новый студийный альбом Yandel — Infinito.
#Yandel#МузыкаЛАТАМ#Arcángel#La8vaMaravilla#Farruko#AyDale#ManuelTurizo#Bachata#LatinPop
👉Всегда свежие новости о странах Латинской Америки
Понедельник начинаем с танца☺️
Как вам наш новый танцевальный дуэт и творческая коллаборация с Иосифом?
#dance#dancer#trending#танцы#dancetrends#bachata#tiktoktrend#tiktoktrends#танцевальныйтренд#цветтанцакрасный#тренд#danceблогер#danceblogger#танцевальныйдуэт
Пятницу традиционно встречаем с танцами!💃🕺🏼👏
Хороших всем выходных и отличного настроения!❤️❤️❤️
#dance#dancer#trending#танцы#dancetrends#bachata#tiktoktrend#tiktoktrends#танцевальныйтренд#цветтанцакрасный#тренд#danceблогер#danceblogger#танцевальныйдуэт
Романтической Вам пятницы и прекрасных выходных, друзья!❤️
По уже сложившейся традиции дарим Вам в эту пятницу новый танец! 💃🕺🏼🔥
#dance#dancer#trending#танцы#dancetrends#bachata#бачата#бачатамосква#танцевальныйтренд#цветтанцакрасный#тренд#danceблогер#danceblogger#танцевальныйдуэт
С пятницей друзья!😉
Давно не было бачаты. Исправляемся!
Ловите чувственную городскую бачату.💃🕺🏼🏙️
Ждём ваши реакции и комментарии в поддержку нового танцевального дуэта с Владом!🤗❤️
#dance#dancer#trending#танцы#dancetrends#bachata#бачата#бачатамосква#танцевальныйтренд#цветтанцакрасный#тренд#danceблогер#danceblogger#танцевальныйдуэт
Понедельник - день тяжёлый?😱
Неее. Не слышали!🤪 Улыбаемся и пляшем!💃😉
#dance#dancer#trending#танцы#dancetrends#bachata#tiktoktrend#tiktoktrends#танцевальныйтренд#цветтанцакрасный#тренд#danceблогер#danceblogger#понедельник#понедельникденьхороший
Врываемся в эту пятницу чувственной бачатой в новом танцевальном дуэте с Фиделем💃🕺🏼🔥
Ждём ваши сердечки и комментарии.❤️ Чем больше наберём, тем чаще будем радовать Вас новыми видео. Мы приготовили для Вас много красивых, огненных рилсов. Следите за новостями!😉
#dance#dancer#trending#танцы#dancetrends#bachata#бачата#бачатамосква#танцевальныйтренд#цветтанцакрасный#тренд#danceблогер#danceblogger#танцевальныйдуэт#худи
Упс! В конце кому-то было бо-бо!🤭
P.S. Друзья, отличной всем пятницы и прекрасных выходных!😘
#dance#dancer#trending#танцы#dancetrends#bachata#tiktoktrend#tiktoktrends#танцевальныйтренд#цветтанцакрасный#тренд#danceблогер#danceblogger#танцевальныйдуэт#выходные#пяница#непара
Хотите танцевать не только "для себя", но и участвовать на соревнованиях, фестивалях и шоу??!
▪️
Такую возможность Мы готовы Вам предоставить 😌
*
Наши прекрасные девочки из группы CONTEMPORARY уже начали готовиться к фестивалю КЛИН В ТАНЦАХ при поддержке проекта ТАНЦЫ НА ТНТ.
▪️
Хотите оказаться в числе участников? Добро пожаловать к нам 😇
Ждём Всех желающих на пробное бесплатное занятие✨
Возраст: от 13 лет и старше
Запись в сообщения группы или по номеру:
8-916-737-84-26
▪️
МЫ В ТАНЦАХ? А ВЫ? 🤫
#постановкатанцев#постановкатанцеввклину#свадебныйтанецклин#танцывклину#клинтанцует#клинтанцы
#студиятанца#dancestudio#salsa#bachata#ballroom#сальса#бачата#сальсаклин#бачатаклин#спортивныебальныетанцы