TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #121 · 20 јул.

Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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

Резултати

Пронајдени 6 слични објави

Пребарај: #bednotown

当前筛选 #bednotown清除筛选
BDTN Island

@bdtn19 · Post #102 · 14.06.2022 г., 14:44

Последние 5 футболок “United States of Siberia” Оверсайз / кулирка / печать шелкография Размеры М, Л, ХЛ, ХХЛ 1500₽ Последняя партия по такой цене Заказать можно в лс или на сайте. #bednotown#bednotownfactory#siberia#omsk#unitedstatesofsiberia

BDTN Island

@bdtn19 · Post #111 · 19.06.2022 г., 13:37

Делаем пробник обложки для паспорта с нашим новым принтом. Винил, ткань, ламинация, прошита по контуру. Печать с двух сторон. Открываем предзаказ со скидкой на первые 50 штук. Стоимость - 350₽ , после выпуска партии обложка будет стоить 550₽. Примерная готовность на 04.07, тогда же и начнем высылать заказы. Предзаказ можно будет оформить здесь в директе , или на нашем сайте. #bednotown#bednotownfactory#omsk#siberia#damirmuratov#art#siberian#omsk55#омскстолицавселенной

BDTN Island

@bdtn19 · Post #105 · 14.06.2022 г., 16:44

Эскиз нового принта для наших изделий готов Техника акварель / фломастеры В скором времени конвертируем в цифру и сделаем предзаказ на футболки Пишите в личку, если появятся вопросы или предложения Всем мир ;) #bednotown#bednotownfactory#omsk#omsk55#siberia#irtysh#damirmuratov#art#modernart#pacific#mountains#palms

BDTN Island

@bdtn19 · Post #124 · 26.06.2022 г., 05:15

Делаем скидку 20% на все флаги. До 1 июля. Получается united states и united kingdom по 1200₽, а island of freedom - 1600₽. Размеры все! (У нас много осталось размера 60-это 5хл, его вообще с супер скидкой отдадим) Заказать можно в директе , или на сайте. При покупке от 2х штук - доп скидка (на сайте эта история тоже работает) Кстати о способе оплаты - карты у нас на портале принимает система unitpay , если у кого возникают неувязки - дайте знать , пожалуйста. И лучше пишите в директ в таком случае. Товар распродаем, потому что готовим новое. Всем отличного дня! #bednotown#bednotownfactory#omsk#unitedstatesofsiberia#unitedkingdomofsiberia#siberiaislandoffreedom#art#siberia#damirmuratov#tshirts#merch#clothes#oversize

BDTN Island

@bdtn19 · Post #106 · 17.06.2022 г., 05:53

Футба «Бритва Омск» 100%хлопок/ классический фасон / печать шелкография Размеры М-3ХЛ 1500₽ При покупке от 2х штук сделаем хорошую скидку! В Омске в наличии в @lll.tochka Заказ можно оформить в директе или на нашем сайте Отличного дня! #bednotown#bednotownfactory#omsk#siberia#damirmuratov#merch#print#бритваомск#омск#сибирь#панкрок#punkrock#egorletov

BDTN Island

@bdtn19 · Post #69 · 08.06.2022 г., 07:51

Мы регулярно печатаем футболки вручную через трафареты. Их лично отрисовывает и вырезает @bednotown , а потом мы вместе переносим рисунок на изделие. Футболки можно найти на сайте в разделе «Крафтовая коллекция». Также, обращайтесь в директ, если заинтересует какая позиция. Печатаем мы акрилом по ткани - это надежно и крепко, да и сам продукт получается эксклюзивным и пропитанным теплотой рук. Хочешь сделать хорошо - сделай это сам (с) Хорошего дня, друзья! #bednotown#bednotownfactory#handmade#tshirt#craft#craftcollection#damirmuratov#omsk#siberia#art#acrylicpainting#decola#sea#sealife#sealovers#exclusive#rarepicture#rare#trafaret#printing