Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
MVision for Vision Pro 正式上线,免费哦!
继 AppleTV 版本后,MVision 1.0 今天正式在 Apple Vision Pro 上线啦。
这次第一个版本已经包含了完整核心功能 -- 推荐、动态、搜索、直播、影视、发现、历史记录、收藏、追更、稍后再看以及设置,基本满足日常使用需求。
标签:#vision
Created by RocM
官方频道:@rocCHL
官方群组:@roctech
官方合作:@rocmmbot
Let's cheer for India's top position by winning today's legendary fight.💪🔥🏏
Join #Vision 11 to 2X your excitement with an amazing win of Rs. 15 lakhs.📱💰 Download the app now—> https://app.vision11.in/Vision11.apk
Инновационная лаборатория для IKEA. Как развить культуру новаторства в огромной кампании?
SPACE10— независимая датская дизайн студия, созданная командой ArtRebel для IKEA в 2014 году. Как пишут создатели: «Когда мы начинали, у IKEA не было ни одного плохого года». Но, Торбьорн Леф, на тот момент CEO IKEA Systems B.V, посчитал, что IKEA должна укрепить позиции в будущем.
Перед SPACE10 стояла миссия понять чем должна стать ‘мебельная компания’ в 21 веке на горизонте 10-20 лет (восторг).
Что важно
◽️В разработке идей команда вообще не ориентировалась на финансовые KPI года. Задача SPACE10 — увидеть куда идти завтра, а не как выжить сегодня.
◽️Стартовая точка дизайн-процессов была за пределами компании и категории. Цитата: «Вместо того, чтобы думать о том как создать лучшее будущее для IKEA, мы задавались вопросом о том, как IKEA может помочь создать лучшее будущее для мира»
◽️Студия финансировалась IKEA, но была независимой. Чтобы придумывать радикальные идеи, команде было важно уйти от ограничений корпорации.
◽️Все это было оговорено и принято обеими сторонами.
‘Good design starts by asking the right questions’
Другие цели — другие принципы.
SPACE10 задавали вопросы, и чем ‘неудобнее’ — тем лучше.
Коллаборация вместо конкуренции. SPACE10 как можно раньше привлекали сторонних экспертов, даже презентовали идеи на конференциях. Это позволяло быстрее получить обратную связь.
Результаты
SPACE10 изучали экономику замкнутого цикла; доступность питания; чистую энергетику и многое другое.
Часть идей сразу внедрялись в работу компании (IKEA Place app). Примечательно, команда скорее избегала такого сценария: «Мы были настроены не вмешиваться в бизнес компании и больше смотреть на то, чем IKEA будет завтра. Иногда нам это не удавалось, и мы влияли на сегодняшний бизнес»
Главным результатом деятельности SPACE10 стало создание культуры инноваций внутри самой IKEA. «Не рыба, а удочка»
🔗Почитать больше
#vision
@planning_horizon
Неамериканский футбол⚽️
Еще про горизонт планирования.
Горизонт планирования Apple, Месси, Дэвида Бэкхэма и Хорхе Маса (совладельцев клуба Интер Майами).
На графике выше — рост подписок на трансляции лиги в Apple TV после первого матча Месси в MLS (Major Soccer League в США). За сутки подписку оформили 100 тысяч человек, а июль для Apple TV стал лучшим месяцем по показателю регистраций.
Футбол — это гораздо больше, чем развлечение. Но всё-таки развлечение. Мощные традиции своего собственного, американского национального спорта создали ментальный барьер для первого шага к массовой популяризации неамериканского ‘соккера’. Но в этот момент появляются те, кто видит возможности.
По итогу 😃
🍸У Apple есть Месси, новый суббренд, который станет точкой входа пользователей в подписку. И, возможно, мощным кирпичиком в продукт «шоу про спорт», в пику Netflix.
🍸У Месси — часть дохода, который Apple имеет за пределами США от пакета MLS и дополнительная, многомиллионная аудитория. Новая селебрити волна 🌊 на которой можно серфить🏄♂️ по канонам Майкла Джордана и Дэвида Бэкхэма. Коленные чашечки не вечны, а вот харизму личного бренда не потерять. Можно еще десятилетия создавать и/или рекламировать футболки H&M (а может и труселя 🔗https://youtu.be/vPcjTefW_Ao?si=Sg0hNhtDp6GfiEy4)
🍸У MLS и «Интер Майами» новое рождение. Новые фанаты, новые игроки, новые контракты, и тд, если справятся с управлением.
🍸У рынка развлечений США — новая точка роста.
Будем наблюдать за динамикой изменений в мире футбола.
‘Ничто не вечно под луной’ (с)
#vision
@planning_horizon
"ISRO's Chandrayaan mission 3 is a giant breakthrough for India!"
Keep your #Vision high, just like ISRO, to reach incredible achievements!
Now, go for a powerful play and aid Indian fantasy sports to succeed!
Download now #Vision11
https://vision11.in/APK/vision11.apk
Dil o mein hai pyaar, aagya hai India ka Tyohaar! ❣️
The Lions 🦁 have the #Vision to become Champion, aap bhi ho jao taiyyar to win like a warrior! 💪
Play Indian T20 League on #Vision11 now!
https://vision11.in/APK/vision11.apk
Our boys have got their priorities sorted, do you have the #Vision to choose the right captain? 🎯
Use your knowledge, make your teams and select the perfect captain to score maximum points on #Vision11🔥
Download the app now!
https://vision11.in/APK/vision11.apk
Jab ho aapke paas sahi #Vision, tab Darr ka no reason! 💥
Khelo #Vision11 pe aur le jao exclusive winnings! 💯
Download the app now!
https://vision11.in/APK/vision11.apk
When #Vision is greater than dreams, #Vision11 is the best option! 🎯
Vision sahi ho toh #Vision11 pe jeetne se tumhein koi nahi rok skta! 💥
Download the app now!
https://vision11.in/APK/vision11.apk
All it needs is a #vision to win! 🎯
Settle for nothing less, play on #vision11 and win everyday! 💪
Download the app now!
https://vision11.in/APK/vision11.apk