Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
💫Книги для вдохновения и перезагрузки этой зимой #books
Пока за окном снежно и холодно, можно уделить больше внимания книгам, которые помогут настроиться на весеннюю волну и зарядиться энергией для новых начинаний.
Делитесь подборкой с близкими и обсуждайте книги, к которым хочется возвращаться вместе 🤍
ART FLASH
💫Что почитать на новогодних каникулах?#books
Январские праздники — время, когда после декабрьской суеты особенно хочется замедлиться. Поэтому мы предлагаем погрузиться в искусство через книги.
Делитесь подборкой с близкими и обсуждайте книги, к которым хочется возвращаться вместе.
ART FLASH
💫Что почитать, если …хочется разбираться во всем#books
В карточках делимся подборкой книг, которые помогут окунуться в разные сферы — от музыки и стрит-арта до моды и архитектуры 🤍
ART FLASH
💫О чем нам рассказывают обложки книг? #books
Каждая книга встречает нас обложкой — именно она задает настроение, обещает атмосферу и прячет внутри целый мир. Мы поговорили с издательствами Московской книжной недели и узнали, что каждая обложка хранит свою маленькую тайну. Подробности — в карточках.
Потом мы задумались: а если бы мы сами были обложкой, какой бы она была — минималистичной и строгой, романтичной, дерзкой или классической? Мы составили тест, который поможет узнать, какая обложка отражает вашу внутреннюю историю. Пройти его можно тут 🤍
ART FLASH
Привет, коты! Я с вами периодически делюсь любимыми произведениями контр-литературы, но классику никто не отменял- это база. Одним из моих любимых таких произведений является «Ночной портье» (ориг. Nightwork) — наиболее характерное произведение Ирвина Шоу, в котором соединяются авантюрный сюжет, психологическая проза и размышления о случайности как движущей силе человеческой судьбы
Сюжет
Главный герой — Дуглас Граймс, бывший лётчик, чья жизнь рушится после медицинского запрета на полёты. Он оказывается на социальном «дне» — работает ночным портье в дешёвом отеле и живёт без особых надежд
Перелом происходит случайно: один из постояльцев умирает, и Граймс обнаруживает крупную сумму денег. Он решается на риск — присваивает их и отправляется в Европу, где пытается «начать заново» и взять реванш у жизни
Дальше роман превращается в цепь стремительных событий: путешествия, авантюры, опасные знакомства, попытки закрепиться в новой реальности. Но за внешней динамикой постепенно раскрывается главный вопрос — может ли случай действительно изменить судьбу или человек остаётся пленником своего характера
Роман часто трактуют как историю о иллюзии свободы: герою кажется, что он вырвался из ограничений, но на деле он продолжает двигаться в рамках своих слабостей и страхов
Особенности стиля
Стиль Ирвин Шоу здесь узнаваем:
1. Динамика и кинематографичность
Сюжет развивается быстро, с частыми сменами локаций и ситуаций. Это почти «роман-путешествие» с элементами триллера
2. Реализм и психологическая точность
Шоу подробно показывает внутренние колебания героя — от эйфории до тревоги и моральных сомнений
3. Отсутствие прямой морализации
Автор не навязывает выводы, оставляя читателю пространство для оценки поступков персонажа
4. Социальный подтекст
За личной историей видна типичная для Шоу тема — человек в мире денег, успеха и неравенства
Читается на одном дыхании! Если вы еще не знакомы с ним очень рекомендую!
#books
Книга о масле 📚
Книга «The Butter Book» Анны Стоквелл – это подробное исследование сливочного масла как одного из ключевых продуктов кухни.
Внутри – техники и рецепты: как выбирать, взбивать, топить и ферментировать масло, а также использовать его в соусах, выпечке и горячих блюдах.
Среди рецептов – соус бер-блан, блюда с морепродуктами и мясом, десерты и разные варианты ароматизированного масла – от классических до более необычных сочетаний.
#books
«Nordic. Вдохновение, уют и еда со вкусом Севера» 📚
Атмосферная кулинарная книга блогера Анжелики Зоркиной о северной кухне и образе жизни в стиле nordic.
В книге собраны более 90 рецептов – от традиционных блюд до авторских интерпретаций, вдохновлённых скандинавской культурой и природой Севера: гравлакс из лосося, пироги и киши, блюда с картофелем, рыбой и сезонными овощами, скандинавские булочки и десерты с брусникой.
#books
˖ ࣪⭑ Dingg.. Dongg.. 🛎
Check it out students, the bell has rung. It’s such an honour to present our new #Books. Dont forget to read our school rules before using it hoho. Have a wondrous day ahead! ♡⸝⸝
˖ ࣪⭑ Dingg.. Dongg.. 🛎
Check it out students, the bell has rung. It’s such an honour to present our new #Books. Dont forget to read our school rules before using it hoho. Have a wondrous day ahead! ♡⸝⸝
˖ ࣪⭑ Dingg.. Dongg.. 🛎
Check it out students, the bell has rung. It’s such an honour to present our new #Books. Dont forget to read our school rules before using it hoho. Have a wondrous day ahead! ♡⸝⸝
«Стейксизм» 📚
Исследование того, как еда оказывается втянута в систему гендерных стереотипов. Почему мясо ассоциируется с мужественностью, а лёгкие блюда – с женственностью? Откуда взялись представления о «мужской» и «женской» пище и почему они до сих пор влияют на наше поведение за столом? Автор разбирает культурные, исторические и социальные механизмы, которые формируют эти установки, показывая, как они закрепляются в медиа, рекламе и повседневных привычках. Книга предлагает критически взглянуть на устоявшиеся представления о еде и понять, как гендерные мифы продолжают определять то, что и как мы едим.
#books
˖ ࣪⭑ Dingg.. Dongg.. 🛎
Check it out students, the bell has rung. It’s such an honour to present our new #Books. Dont forget to read our school rules before using it hoho. Have a wondrous day ahead! ♡⸝⸝