Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🥷 The #UXLINK exploiter spent 10.88M $DAI to buy 5,493 $ETH at $1,981 seven hours ago.
On Jan 30, he also spent 16.87M $DAI to buy 203 $WBTC ($13.31M) at $83,225, which is now down $3.56M. link
😕 UXLINK CEO 의 공식 입장문
✅ UXLINK가 DAXA에서 상장폐지를 당한 날, 어렵게 UXLINK CEO를 만나 인터뷰를 진행할 수 있었습니다.
이번 인터뷰를 통해 그는 UXLINK의 공식 입장과 향후 계획에 대해 직접 이야기를 진행하였습니다.
📂 사건 개요 및 대응
🟢사건 발생 : 8월 22일 KBW 기간에, 서명 키 2개가 탈취되어 해커가 일부 스마트컨트렉트를 제어 및 자금 탈취를 진행함
🟢사건의 대응 및 조치 : 남은 자금 긴급 보호 | 보안회사 및 거래소 협력을 통해 자금 추적 및 일부자금 동결 | 경찰 수사 및 복구 절차 진행
🪙 피해 보상 계획
🟢1차 보상안: 해킹 이전 시점 기준으로 1:1 스왑 복구 진행
🟢2차 보상안: DAO와 커뮤니티 협의 후, 추가 단기·장기 보상조치 논의
🟢참여 거래소: OKX, Gate.io 등은 이미 마이그레이션 작업 중
🟢한국 거래소: DAXA 결정으로 일시적 상장폐지 → 재상장 절차 준비 중
🏐 UXLINK 의 향후 비전
🟢UXLINK는 전 세계 5천만 명 사용자를 보유한 SocialFi 플랫폼
🟢토큰의 65%가 커뮤니티에 할당된 구조로, "커뮤니티 중심" 철학 유지
🟢AI 분석 시스템 / PayFi 카드 / 에이전트 기능 도입으로 토큰 활용성 강화 예정
🟢한국 포함 주요 지역 앰배서더 프로그램 확대, 지역 커뮤니티 의견 반영
🟢기존 백서 및 로드맵과 일치할 예정
📱 CEO 의 메시지
한국 커뮤니티 여러분, 어려운 시기에도 변함없이 UXLINK 를 지지해주셔서 진심으로 감사드립니다.
보상 복구는 물론, 투명한 재건 과정을 통해 신뢰를 반드시 회복하겠습니다. 감사합니다
홈페이지 | 트위터 | 한국공식텔레그램
#UXLINK
UXLINK Exploiter has sold 5,496 $ETH for $11.82M $DAI in the past 1 hour.
#UXLINK got hit on september 22, 2025 when attackers took over its multisig wallet, draining more than $44M in the process.
https://intel.arkm.com/explorer/entity/uxlink-exploiter
https://x.com/OnchainLens/status/2034815476908662900
Follow @onchainlens for more onchain updates
⏰ Final 2 weeks to join the UXLINK Supporters Appreciation Event!
Complete the @XerpaAI and #UXLINK FujiCard tasks to earn your $UXLINK airdrops 💰💳
Join now: https://dapp.uxlink.io/season5-extension
Kraken support UXLINK token migration! The New #UXLINK (ERC20) trading and funding is expected to resume by November 7th at 2pm UTC.🚀🇺🇸
https://status.kraken.com/incidents/7tdjqs74dmld
MEXC completes #UXLINK Contract Swap, and will resume $UXLINK ( on ETH mainnet) deposits, withdrawals and trading on Oct.15, 03:30 UTC. ❤️🚀
https://mexc.com/en-GB/announcements/article/mexc-completes-uxlink-uxlink-contract-swap-17827791530866
Bybit has completed the #UXLINK contract upgrade, as well as the token swap and refund process.
UXLINK trading will resume on October 14, 2025, at 11AM UTC.
https://announcements.bybit.com/article/completion-of-uxlink-contract-upgrade-blt9f977c6c135039e9/
Bitget has completed #UXLINK contract swap and will support $UXLINK ( on ETH mainnet) trading and withdrawal on Oct.13 10:00(UTC). ❤️🚀https://bitget.com/support/articles/12560603839560
We have received the notice from DAXA regarding the end of support for $UXLINK (on Arbitrum) by Korean exchanges. The conversion between #UXLINK and Korean exchanges remain active about the new $UXLINK (on Ethereum) swap and compensation plan.
We have intensive user base in South Korea🇰🇷 and are committed to compensate in a fair and transparent manner. Given the extended holiday period in Korea (October 3–12), we will do our best to finalize the proposal after the break.