Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
⚡ ETHIOPIA: AFRICA'S ENERGY POWERHOUSE
ኢትዮጵያ፡ የአፍሪካ የኃይል ማዕከል
Not just surviving - POWERING the future! 🌍💪
━━━━━━━━━━━━━━━━
⚡ GRAND ETHIOPIAN RENAISSANCE DAM (GERD)
ታላቁ የኢትዮጵያ ህዳሴ ግድብ
🏗️AFRICA'S LARGEST DAM:
• 74 BILLION m³ capacity
• 5,150 MW power
• 175m high (57 floors!)
• $5 billion - 100% Ethiopian-funded! 🇪🇹
• Status: OPERATIONAL ⚡
"የኢትዮጵያ ህዳሴ በኢትዮጵያውያን"
(Ethiopian Renaissance by Ethiopians)
━━━━━━━━━━━━━━━━
💡 WHAT IT MEANS
✅ Powers all Ethiopia + exports
✅ Sudan: flood control + steady flow
✅ Egypt: regulated water supply
✅ 100% renewable - ZERO emissions
✅ Lights millions of homes across East Africa
"One dam lighting half of Africa"⚡🌍
━━━━━━━━━━━━━━━
🌱 100% GREEN ENERGY NATION
Ethiopia's mix:
• Hydropower: 95%+
• Wind: Growing fast
• Solar: Huge potential
• Coal & gas: ZERO ✅
World's cleanest energy grid!🌿
━━━━━━━━━━━━━━━
🔌 ENERGY EXPORT - "AFRICA'S BATTERY"
Currently powering:
• 🇸🇩 Sudan: 100+ MW
• 🇩🇯 Djibouti: 60+ MW
• 🇰🇪 Kenya: Ready!
Future: South Sudan, Somalia, Eritrea, Egypt
💰 Billions in export income + regional peace
"የኢትዮጵያ ኃይል የአፍሪካን ያበራል"
(Ethiopian power lights Africa)
━━━━━━━━━━━━━━━
👷 OPPORTUNITIES FOR YOUTH
⚡CAREERS:
• የኤሌክትሪክ ምህንዲሶች (Engineers)
• Dam operators
• Renewable specialists
• Grid managers
🎓 Training at Ethiopian Electric Power, universities, GERD site
💼 Thousands of jobs, high salaries, build the future!
━━━━━━━━━━━━━━━
💚💛❤️ FUNDED BY ETHIOPIANS
Every citizen contributed:
• Salary donations
• Diaspora bonds
• Personal savings
More than infrastructure - это символ единства и гордости!
"ህዳሴ - የኢትዮጵያውያን ኩራት"
(Renaissance - Ethiopian Pride)
━━━━━━━━━━━━━━━
🌍 GLOBAL IMPACT
Ethiopia proves:
✅ Renewable energy works at scale
✅ Africa can self-fund development
✅ Green growth possible
✅ Cooperation beats conflict
The world watches - Ethiopia delivers!🌟
━━━━━━━━━━━━━━━
⚡ MORE COMING
🚀 Next projects:
• Koysha Dam (2,160 MW)
• Wind & solar expansion
• Geothermal (Rift Valley)
Ethiopia's energy future = UNLIMITED!💡
━━━━━━━━━━━━━━━
💡 MIND-BLOWING FACTS:
🤯 Reservoir takes 3 years to fill
🤯 Could power 300+ million people
🤯 12,000+ workers built it
🤯 10+ million m³ concrete
🤯 Already generating power!
━━━━━━━━━━━━━━━
⚡ FROM WATER TO POWER
🌊 Part 1: Water = Life source
⚡ Part 2: Power = Future engine
Ethiopian Renaissance by Ethiopians, for Africa!🇪🇹💪
The future is POWERED BY ETHIOPIA! 💡🌟
━━━━━━━━━━━━━━━
🌍 ETHIOPIA | ЭФИОПИЯ | ኢትዮጵያ
📱@ethiopia telegram
#GERD#EthiopiaEnergy#GreenEnergy#AfricaPower#EthiopianPride#RenewableEnergy#PoweringAfrica
## 🦴 LUCY: MEETING HUMANITY'S 3.2 MILLION YEAR OLD GRANDMOTHER
## 🦴 ሉሲ - የሰው ዘር እናት
🌍 Where human history began - literally!
In Addis Ababa lies a treasure that connects every person on Earth - Lucy (Dinknesh), the 3.2 million year old fossil that rewrote human history! 💫
## 🏛️ NATIONAL MUSEUM OF ETHIOPIA
📍LOCATION: King George VI Street, Addis Ababa
🕐HOURS: Tuesday-Sunday, 8:30 AM - 5:30 PM (Closed Mondays)
💵ENTRY FEE:
- Foreigners: 100 ETB (~$1.80)
- Ethiopians: 10 ETB
- Photography: +50 ETB
📸PRO TIP: Visit weekday mornings (9-11 AM) for fewer crowds!
## 🦴 LUCY - DINKNESH (ድንቅነሽ)
*"You are wonderful" in Amharic*
✨DISCOVERED: November 24, 1974, Afar Region
✨AGE: 3.2 million years old
✨SPECIES: Australopithecus afarensis
✨SIGNIFICANCE: 40% complete - most complete early human ancestor ever found!
✨HEIGHT: 1.1 meters - small but mighty!
## 🌟 WHY LUCY CHANGED EVERYTHING
Lucy proved our ancestors walked upright BEFORE developing large brains! She literally rewrote anthropology textbooks! 📚
## 🏛️ MUSEUM HIGHLIGHTS
✨ Lucy's iconic skeleton display
✨ Ancient royal crowns and thrones
✨ Emperor Haile Selassie's throne
✨ Traditional Orthodox Christian art
✨ Artifacts spanning 3 million years
## 💡 HOW TO GET THERE
📍 Taxi from Meskel Square: 15-20 min, ~150-200 ETB
📍 Walking from Piazza: 25 minutes
📍 Blue taxi: 10 ETB (ask for "National Museum")
## 🌍 LUCY'S STORY
🇷🇺 Soviet paleontologists collaborated with Ethiopian researchers in 1970s-80s, helping establish Ethiopia's paleontological research!
🌎 Lucy traveled to USA (2007-2013) where 3 million people visited! She safely returned home to Ethiopia! 🇪🇹
## 🌟 FOR YOUNG ETHIOPIANS
This is YOUR heritage! Lucy proves human history STARTED in Ethiopia!
Let this inspire you to:
✨ Study paleontology & archaeology
✨ Become museum professionals
✨ Share Ethiopia's story globally
## 💫 THE MESSAGE
Ethiopia isn't just beautiful landscapes - it's where HUMANITY began! Every person on Earth can trace ancestry back to Ethiopia!
---
Visit Lucy. Know your heritage. Share your pride!🇪🇹❤️
*Where humanity's journey began, Ethiopia's future shines brightest!* ✨
#LucyEthiopia#ሉሲ#NationalMuseumEthiopia#AddisAbaba#CradleOfHumanity#EthiopianHeritage#Dinknesh#VisitEthiopia#EthiopianPride
🇪🇹Adwa at 130: A Victory That Shaped a Continent
By: Alexander Yoh. / @rednile12
On March 1, 1896, Ethiopia achieved the impossible—defeating Italy and sending shockwaves through colonial powers. Adwa wasn’t just a battle; it was a statement: Africa can defend its sovereignty.
Today, Adwa’s legacy is a blueprint for the future—unity across diversity, strategic independence, and self-reliance. From Menelik II’s brilliant leadership to Ethiopia’s modern projects like the Grand Renaissance Dam, the message is clear: our strength is in standing together and shaping our destiny.
📖 Read the full story here: Adwa’s 130-Year Legacy
#የጥቁር_ህዝብ_ኩራት#ዓድዋ_130
#የኢትዮጵያውያን_ድል#Adwa130#EthiopianPride#AfricanUnity#Sovereignty#MenelikII#TaytuBetul#RedNileMedia#AfricanResilience#AdwaLegacy#SelfReliance
🎙️WEEK 17 | LIVE DISCUSSION
⚔🛡My Generation & Adwa
Reflecting on the 130th Anniversary of the Victory of Adwa
In honor of the 130th Anniversary of the Victory of Adwa, celebrated on Yekatit 23, 2018 (E.C.), we invite you to a powerful and timely conversation on legacy, identity, and national consciousness.
Tonight, on the Ethiopia First Telegram Channel, we will discuss, reflect, and critically engage on what Adwa means for our generation — and why it still matters today.
Be part of this historic dialogue.
📅February 27, 2026
🕗8:00–10:00 PM (EST) | 2:00–4:00 PM (Ethiopia Time)
🎙️Host: Ethiopia First
🗣️Guest: Alexander Yohannes — Red Nile Media
🔗Join Live:https://t.me/+AAE_Pc8aWTczYTA0
—
#Adwa130#VictoryOfAdwa#AdwaAnniversary#MyGenerationAndAdwa
#EthiopiaFirst#RedNileMedia#EthiopianHistory#AfricanVictory
#PanAfricanLegacy#Yekatit23#EthiopianPride#AdwaSpirit#EthiopiaRising