Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#Solana
Lightspeed — IR-платформа для инвесторов экосистемы Solana
Blockworks публично запустил Lightspeed — первую investor relations-платформу, созданную специально для инвесторов в Solana. Проект разработан совместно с Solana Foundation.
Платформа ориентирована на институциональных инвесторов, фонды, управляющих активами, эмитентов и крупных держателей токенов. Lightspeed объединяет:
— ончейн-данные по сети и приложениям,
— институциональные ресерч-материалы,
— новостную ленту,
— трекер офлайн-мероприятий.
Покрытие включает саму сеть Solana и более 45 компаний экосистемы — от DeFi-протоколов (Jupiter, Kamino) и AMM (BisonFi, Raydium) до dePIN-проектов (Helium, Geodnet).
Заявленная цель — привести коммуникацию экосистемы к стандартам традиционных рынков: прозрачные KPI, структурированная отчетность и единая точка доступа для институционального капитала.
📱Twitter Announces Launch of Smart Cashtags for Solana Integration
X is introducing Smart Cashtags, a new feature that allows users to seamlessly tag Solana-based tokens in posts using either cashtags or smart contract references.
By tapping on a tagged #Solana asset, users will gain instant access to real-time pricing data, interactive charts, and relevant news without leaving their timeline.
This innovation enhances social discovery by embedding on-chain assets directly into the user experience, further integrating Solana into the social and financial ecosystem of X.
Circle has minted $500M $USDC on @solana.
In total, they have minted $28.5B $USDC in 2026 on #Solana.
https://x.com/OnchainLens/status/2033934568865272044
Follow @onchainlens for more onchain updates
Circle has minted $1B $USDC on @solana in the past 10 hours.
In total, they have minted $23.75B $USDC in 2026 on #Solana.
https://x.com/OnchainLens/status/2028993724236378143
Follow @onchainlens for more onchain updates
Circle has minted another $1B $USDC on @solana, in the past 8 hours.
So far, they have minted $4.25B $USDC on #Solana in 2026.
https://x.com/OnchainLens/status/2011233135195767042
Follow @onchainlens for more onchain updates
Circle has minted another $1B $USDC on @solana, in the past 24 hours.
So far, they have minted $1.75B $USDC on #Solana in 2026.
https://x.com/OnchainLens/status/2008548524519219420
Follow @onchainlens for more onchain updates
Circle minted their first $750M $USDC on @solana in 2026.
In 2025, they minted $56.25M $USDC on #Solana.
https://x.com/OnchainLens/status/2007244699560767928
Follow @onchainlens for more onchain updates
Just In: Circle has minted another $500M $USDC on @solana.
So far, they have minted $55B $USDC on #Solana in 2025.
https://x.com/OnchainLens/status/2004382646298902734
Follow @onchainlens for more onchain updates
Circle has minted $500M $USDC on the @solana network.
Since 10/11, they have minted a total of $18B $USDC on the #Solana Network.
https://x.com/OnchainLens/status/2003098653146411126
Follow @onchainlens for more onchain updates