Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🎶 Продюсер Максим Фадеев анонсировал выпуск пластинки с неизданным материалом группы Serebro
Релиз состоится 19 июля перед премьерой нового состава музыкального коллектива. Прекративший в 2019 году существование поп-проект Serebro перезапустят.
#МаксимФадеев#Serebro
СТОП! СЛИТО.💦
Украшения на все времена!
Блеск и элегантность серебряных украшений завораживают, пробуждая в нас чувство стиля и индивидуальности. Серебро, обладая уникальной теплотой и мягкостью, становится идеальным материалом для создания неповторимых украшений.
Каждое серебряное колье, браслет или серьги имеют свою историю - от древнегреческих изваяний до современных авторских работ. Это не просто металл, это воплощение творчества и высоких эмоций, переданных мастером от сердца к сердцу. Серебро отлично сочетается с различными камнями, от традиционного бирюзового до загадочного аметиста, позволяя каждому изделию заиграть новыми красками.
Откройте для себя мир серебра, и Вы увидите, как он изменит Ваше представление о красоте и элегантности!
Для заказа серебряных украшений:
- Переходите по ссылке на наш сайт, указанный в шапке профиля.
- Пишите нам в сообщения группы.
- Посетите наш ювелирный салон по адресу г. Ярославль, ул. Малая Октябрьская д.6
#серебряныеукрашения
#осень
#серебро
#serebro
#мода
Приготовьтесь к восхищенным взглядам!
Ювелирные украшения – это ключ к элегантности и оригинальности каждой представительницы прекрасного пола. С их помощью Вы не только украсите любой наряд, будь то скромное платье или праздничный костюм, но и подчеркнете свою индивидуальность!
Для заказа:
- Перейдите по ссылке на наш сайт, указанный в шапке профиля.
- Напишите нам в сообщения группы.
- Посетите наш ювелирный салон по адресу г. Ярославль, ул. Малая Октябрьская д.6
#серебряныеукрашения
#серебро
#serebro
#мода#ювелирныеиздели
#silver
#русскиеремесла
Не ждите особого случая, чтобы сиять!
Позвольте себе разнообразить каждый день с нашими ювелирными украшениями.
Загляните на наш сайт www.rusremesla.ru прямо сейчас!
#украшения
#серебро
#serebro
#мода#ювелирныеизделия
#silver
#серебряныесерьги
#кольцо
#русскиеремесла
#серебрянаяпосуда
Мы так хотим, чтобы лето не кончалось!
Лето - время самых ярких и легких нарядов! Летний стиль требует особого внимания к деталям и здесь на помощь приходят серебряные украшения.
Серебро прекрасно сочетается с летней палитрой. Нежные серебряные серьги с жемчугом или классический браслет с филигранным узором могут стать ярким акцентом в вашем летнем образе.
А как насчет кулонов с природными мотивами? Листочки, цветы или морские ракушки, выполненные из серебра, сделают ваш летний look незабываемым. Они несут в себе атмосферу солнечных дней и запоминаются надолго.
Давайте подольше хранить в памяти летние мгновения, украшенные блеском серебра!
Выбирайте украшения на нашем сайте http://rusremesla.ru/ и продлевайте лето вместе с нами!
#серебряныеукрашения
#лето
#серебро
#serebro
#мода#ювелирныеизделия
#silver
#серебряныесерьги
#кольцо
#русскиеремесла
Лето - время радости, цветов и украшений!
Летние теплые деньки – самое время, чтобы добавить немного блеска и красок в свой образ.
Серебряные браслеты, яркие серьги, легкие колье – все это прекрасно дополнит ваш летний наряд.
Не стесняйтесь экспериментировать - выражайте свою индивидуальность через украшения!
Вопрос для вас: какие украшения предпочитаете носить летом?
Присылайте фото любимых летних украшений в комментарии – мы будем рады!
На нашем сайте http://rusremesla.ru Вы точно найдете, чем себя порадовать!
#серебряныеукрашения
#лето
#серебро
#serebro
#мода#ювелирныеизделия
#silver
#серебряныесерьги
#кольцо
#русскиеремесла
Блеск, который освежает.
Серебро обладает удивительным свойством – его прохладный блеск словно создает эффект свежести. В жаркие дни серебряные украшения смотрятся особенно эффектно, отражая солнечные лучи и добавляя образу лёгкости.
#серебряныеукрашения
#лето
#серебро
#serebro
#мода#ювелирныеизделия
#silver
#серебряныесерьги
#кольцо
#русскиеремесла
Как всегда грандиозно прошли премьеры хитов от HIFI-стриминга Звук - «Вечерний звук», где искромётно выступили Митя Фомин, Полина Гагарина, Vlada Miravi, BEARWOLF, NLO, By Индия, новый состав группы SEREBRO, исполнитель хита Sigma Boy - Betsy, Марсель и другие.
#сберзвук#вечернийзвук#МитяФомин#ПолинаГагарина#Betsy#SEREBRO#BEARWOLF#NLO#Miravi
Не откладывайте на потом!
Прямо сейчас вооружитесь красотой и стильно выделяйтесь из толпы благодаря нашим серебряным украшениям, которые подойдут к любому наряду.
Добавьте нотку изысканности в свою жизнь и позвольте своим аксессуарам говорить о Вас!
Переходите на наш сайт, указанный в шапке профиля!
#серебряныеукрашения
#осень
#серебро
#serebro
#мода#ювелирныеизделия
#silver
#серебряныесерьги
#кольцо
#русскиеремесла
#ярославль
Зачем нам сувениры?
Это вопрос, который задают себе многие. Для кого-то сувенир – это просто память о поездке или о событии, которое они хотят сохранить в своей памяти. Для кого-то это способ выразить свою индивидуальность. В любом случае сувениры – это не просто предметы интерьера, это в первую очередь эмоции и воспоминания, пропитанные различными чувствами!
Сувенирную продукцию вы можете найти на нашем сайте www.rusremesla.ru
#серебряныеукрашения
#лето
#серебро
#serebro
#мода#ювелирныеизделия
#silver
#серебряныесерьги
#кольцо
#русскиеремесла#сувениры
Вместо тысячи слов…
Классическое серебряное кольцо — это не просто украшение, это символ нежности и внимания. Этот подарок способен покорить сердце любой девушки.
Серебро - металл, который олицетворяет чистоту и нежность чувств, а кольцо на пальце девушки напоминает ей о заботе и любви, которую она получает.
Кроме того, серебряное кольцо отлично сочетается с любым нарядом - будь то повседневная одежда или вечернее платье - оно подчеркивает женственность и изящество обладательницы.
Если хотите порадовать свою возлюбленную или просто хотите сделать приятный сюрприз девушке - обратите внимание на классическое серебряное кольцо. Мы уверены, она будет в восторге от такого внимательного и трогательного подарка.
Для заказа:
- Переходите на наш сайт www.rusremesla.ru.
- Пишите нам в сообщения группы.
- Посетите наш ювелирный салон по адресу г. Ярославль, ул. Малая Октябрьская д.6
#серебряныеукрашения
#лето
#серебро
#serebro
#мода#ювелирныеизделия
#silver
#серебряныесерьги
#кольцо
#русскиеремесла
#подарок
Поздравляем с Государственным праздником России - Днем народного единства!
Сегодня мы вспоминаем события, сыгравшие ключевую роль в истории нашей страны. Четыре с небольшим столетия назад этот день ознаменовал начало возрождения России - благодаря сплочению и единению народа, поднявшегося на защиту Отечества, был положен конец одному из самых тяжелых периодов – Смутному времени.
Единение народа во все времена было основополагающим для России. Это та основа, которая связывает наше прошлое, настоящее и будущее. И сегодня согласие и единство общества, основанные на нравственных ценностях, испытанных веками, являются необходимым условием для благополучия России, спокойной и мирной жизни ее граждан.
Давайте хранить мир, согласие и взаимопонимание в нашем обществе. Вместе мы можем преодолеть любые преграды!
С праздником, желаем Вам мира, благополучия и всего самого доброго.
#серебрянаяпосуда
#осень
#серебро
#serebro
#мода
#silver
#серебряныесерьги
#4ноября
#русскиеремесла
#деньнародногоединства