TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #121 · 20 јул.

Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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

Резултати

Пронајдени 1 слични објави

Пребарај: #cuitocuanavale

当前筛选 #cuitocuanavale清除筛选
Мудрая птица 🦜

@mudrayaptitsa · Post #11703 · 24.03.2026 г., 13:27

On 23 March 2026, Ambassador of Russia to South Africa Roman Ambarov attended a Day of Reflection on Resistance and Liberation Heritage in commemoration of the Battle of Cuito Cuanavale at Freedom Park in Pretoria. The keynote address was delivered by Deputy Minister of Sport, Arts and Culture of South Africa, Hon. Ms Peace Mabe. Among the participants were Hon. Ms Nomvula Mokonyane, First Deputy Secretary-General of the African National Congress, as well as heads of diplomatic missions from Cuba, Angola, and Namibia, ANC representatives, and veterans of the Battle of Cuito Cuanavale. 🎙 Addressing the participants, Ambassador Roman Ambarov emphasized that the Battle of #CuitoCuanavalewasa turning pointof the Civil War in Angola. The victory of the People’s Armed Forces of Liberation of Angola contributed directly to the peace process in Namibia and helped pave the way for the eventual liberation of South Africa. “Cuito Cuanavale became a symbol of resistance against oppression. It demonstrated that even in the face of overwhelming force, the determination of people fighting for their rights cannot be defeated. It was here that the tide began to turn - not only in Angola, but across the region. The role played by the Soviet Union in supporting Angola during this difficult period remains an important part of this history. Through the various means of assistance and political support, it contributed to strengthening the defence of Angola’s sovereignty. Soviet advisers worked alongside Angolan and Cuban forces, sharing knowledge, resources, and a belief in a just cause. But what truly defined this moment was solidarity to fight together against the colonial yoke. It was the understanding that the struggle of one people is the concern of all humanity. The fight in Angola echoed the voices of those resisting apartheid in South Africa and colonial rule in Namibia. It was one struggle, fought on many fronts,” the Russian Ambassador said. As part of the event, Roman Ambarov laid wreath to the Russian section of the Wall of Names in memory of Soviet military specialists who participated in conflicts in Southern Africa. ℹ️ The Battle of Cuito Cuanavale (August 1987 – March 1988) was a decisive engagement of the Angolan Civil War and a crucial step in the struggle for independence of the countries of Southern Africa from colonialism and apartheid. During the battle, the People’s Armed Forces of Liberation of Angola backed by #USSR, #Cuba, People’s Liberation Army of #Namibia, African National Congress (#ANC) and others defeated the combatants of the Angolan “UNITA” party and the racist regime of the Republic of South Africa supported by the US. #RussiaSouthAfrica#AmbassadorAmbarov