Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Уже месяц как я размазываю свой контент на четыре площадки: Телега — база, LinkedIn, ВК и MAX. Кроме раздражения, боли и лёгкой депрессии я ничего не испытываю. Периодически ловлю себя на простой мысли: «зачем мне вообще это дерьмо?»
ВК как соцсетью я не пользуюсь, MAX тоже не присутствует в моей жизни. В итоге сам сделал себя жертвой блогинга, где нужно везде успевать, подстраиваться под аудиторию и вести все каналы ради охвата. Но я же вообще не про это. Это только усиливает внутреннюю тревогу и без того на фоне всего происходящего в мире
Сегодня решил, что дальше делаем так: пока телегу окончательно и прям намертво не заблокируют, я ничего менять не буду. Будь как будет. Я не блогер. Я просто веду канал по фану для своей банды и иногда дублирую что-то в LinkedIn. Пусть так и остаётся. Если придётся и будет желание, то начну с нуля
🔗Установить контакт в LinkedIn
🔗Пригласить в этот канал бандитов
#channelupdate
P.s. К посту приложил видео, которое я делал для своей первой и пока последней рекламе канала внутри ТГ (да, ещё те времена, когда был Дизайн-батя)
Пошёл вам навстречу и разблокировал пачку реакций, теперь будет где разгуляться!
🥂
У меня ещё есть место для кастомных эмодзи. Кидайте в комментарии, что хотели бы видеть как реакцию канала. Самые топовые и релевантные — добавлю без колебаний
#channelupdate
В этом году на канале появилось несколько отличных рубрик, но самой популярной по-прежнему остаются пятничные мемы. Я хочу немного разнообразить повторяемый контент, поэтому есть идея для вторичных рефов. Суть в следующем: каждую неделю будет дроп интересных UI/UX работ в формате шота. Это будет как съесть пончик и обогатить свою насмотренность. Что думаете?
Через пару минут я опубликую первый пост, и это будет отправная точка. Если идея вам нравится, дайте знать. Если у вас есть другие идеи, смело пишите в комментарии или боту.
🤵Го
#channelupdate
Здарова банда!
Я решил ещё сильней сломать стену межу нами и представляю вашему вниманию — 🤖Бот-ассистент Дизайн-бати. Теперь вы можете в удобном формате отправить мне какой-нибудь контент, дополнить emoji-набор или оставить предложение с критикой.
Вот это да, теперь канал официально стал лухари, а вы вместе с ним
🥃
🔗Активировать бота
P.s. Ссылка на бота теперь всегда доступна в описании канала
#channelupdate
Вы и сами всё уже знаете, а если в танке, то вот релизнот телеги
Честно не знаю нахера мне сторисы на канале, но если будет органично и не спамно — попробую
🟩Разблокировать сторис для канала
P.s. Голосовать могут только премиальные юзеры один раз в сутки, с аппкой 10.01 и выше
Update: это не просто доступ к сторис, а рейтинг канала, который поднимают подписчики
😮
#channelupdate
Здарова банда!
Мы должны понимать друг друга с полуслова, поэтому я почистил реакции на основе статистики использования и оставил только самое нужное.
Вот что получилось:
🔥Пиздатый контент
💯Абсолютное согласие
😂Бугагашенька
🍌Невероятная красота, возбуждение
🤝Поддержка,принятие информации
🤯Шок, удивление, охуевание
💩Возмущение, недовольство
𐄂 𐄂 𐄂
Теперь ставить реакции проще, уж надеюсь вы возьмете себя в руки и начнете ещё активней тыкать в них ‼️
Давайте проверим новую схему на новом посте 🙃👇
#channelupdate
Hello dear subscribers! 🥰
I know that I've posted quite a few #channelupdate before; saying that I'm staying in a remote area right now (not literally, I'm just saying so because there's no network service here 🥺), hence, explaining why I've become even more quiet and rarely posting content in this channel.
and guess what?
I'm still staying in the remote area! 😍 (happy sarcastic tone).
Anyway, recently, I'm able to post/share quite consistent content every week, because recently, I just remembered that this channel actually have two bots; one is @qw_qwbot and the other one is a bot which is used for the purpose of posting #poll and scheduled post (ikr how could I forgot my lovely bot😭)
So, if you notice that there's been consistent contents posted in this channel recently by an admin named "🍃", that's just me – marce 'hiding behind a bot', & all those posts were actually scheduled 3 days or a week before that when I was out to town.
I could've just post those contents only on the day or the few hours I'm out to town, but I don't want to be quiet every day in this channel (although this channel is Quiet World), and suddenly one day, bombard you with tons of quotes and stuffs – that can be annoying.
Hence, I used that time I could, to manage those scheduled post (in which I typed & made in advance too 🤣) so that the frequency and number of posts are even throughout every week 😜🤗
So yeah, I know that this #channelupdate might not be that important & nobody probably cares about what happening behind the scene but I'm just gonna pretend that some of you do care and type this update anyway😘
But if you actually do care about this #channelupdate & care to know what's happening behind the scene 🥺, let me know by clicking that tempting '❤' button, & if you are quite unaffected in any way, click that '🙂' button 😂
If you're reading till the end of this post, thanks & congrats! I love you 😘
Take care 🌹
#channelupdate#poll@quietworld🍃
Был: 🪦Дизайн-батя
Стал: 🏆@bymakstorch🏆
…ещё во время отдыха, думал среди прочего: а для чего мне вообще этот канал? Нахуя я что-то пишу? Для чего вы подписались? Вы же читаете меня не из вежливости же — у каждого тут сотни подписок, нескончаемая лента... Ответа пока не нашёл, но видимо что-то цепляет. Чуть-чуть почёркал свои черновики да заметки, пересмотрел где-то контент и принял решение сменить название канала, но плавно 😮
Название «Дизайн-батя» яркое, но слишком «мемное» и ограничивающие. Время для моего альтер эго — Maks Torch. С ним я давно роняю запад ебошу разные продуктовые проекты. Под этим флагом мне и вам будет проще идти дальше.
Никакого «дизайн» в названии, всё! Пошла эта связка нахуй. Ничего общего не хочу иметь с сегодняшней дизайн-тусовкой и не хочу, чтобы меня искали по «design». У нас тут своя банда, не забываем.
🕳
Канал финально изменит облик в
🔤🔤🔤🔤🔤🔤🔤🔤🔤
Новую фичу с возможность предложить контент — включил 🟩 но более удобная форма всё равно в боте 🤖@makstorch_bot
#channelupdate#мысли
Банда, есть идея!
На канале почти 100к (ну, без 99к), и у нас тут своя уникальная атмосфера. Кажется, мы готовы запустить свою публичную номинацию
🥂
Предпосылки
Знаю, что многие подписчики по необъяснимой причине читают абсолютно бездарный канал, что-то там про адский юиск
😄, что означает — спрос на такой контент есть. Но я не планирую выливать на вас такой треш и фастфуд, поэтому придумал следующее...
Про номинацию
Хочу каждый год коллективно собирать самые крупные и неудачные проекты, редизайны, решения, а затем устраивать голосование и награждать победителя статуэткой туалета с названием проекта.
🕳
Понятное дело, что сейчас я не буду делать лендос и статуэтку. Пока мне важно ваше мнение, ведь мы же банда алло. Если ты считаешь, что такая номинация необходима в РУ сегменте, ставь 🤜, а если думаешь, что это какая-то поебень, ставь 💩
От вашего отклика зависит наведу я суету или нет. Буду рад участию подписчиков: графика, выбор кандидатов и другой вид деятельности.
#мысли#channelupdate
⚙️Настройка контента на канале
Здарова банда!
🧢
Много времени прошло с последнего опроса и калибровки предпочтений по контенту. Сейчас запущу голосование, а вы будьте зайками — ответьте, какой контент вам больше заходит. В комменты можно кинуть критику, идеи и пожелания.
#опросы#channelupdate
🔥😂🤜💯💩
🍌
😭
Какой реакции нехватает лично тебе?
Кидай один эмодзи в комменты и возможно именно он встанет в один ряд с базой реакций канала.
#channelupdate#опросы
В этом месяце меня пару раз подковырнули: мол, канал стал больше развлекать, чем рассказывать что-то полезное. Говорят, хохотушек стало больше, чем тру край дизайн лайф. И знаете что? Да, согласен. Рубрики веселят, гости заходят, а продуктовая жизнь ушла. Так что да, я услышал и исправляюсь. Буду постить пореже, но с балансом: лайф → рубрики → гости → снова лайф (но это не точно).
Также, я как автор
🧢 вписался в конкурс авторских Telegram-каналов. Формат и подход мне кажется интересным: 15 больших, популярных и живых каналов, не просто оценивают авторов, а репостят самые сильные посты победителей. Идея благородная.
Буду рад поддержке с 7 по 14 июля на канале конкурса @tg_contest_main, а пока, думаю, какие 3 поста отдать на растерзание
🚬
Любые ваши вопросы, идеи и возражения кидайте в комменты или в бота @makstorch_bot
#channelupdate#конкурсы