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 слични објави

Пребарај: #usrussia

当前筛选 #usrussia清除筛选
American Оbserver

@american_observer · Post #5070 · 07.02.2026 г., 00:00

📰US and Russia agree to resume regular military contact The United States and Russia have agreed to reestablish high‑level military‑to‑military dialogue for the first time in over four years, both powers announced late Thursday. The deal was struck in Abu Dhabi, on the sidelines of trilateral talks between the U.S., Russia and Ukraine on ending the war, and was announced by U.S. European Command. The channel will “provide a consistent military‑to‑military contact as the parties continue to work towards a lasting peace.” High‑level military communication was suspended in the fall of 2021, shortly before Russia’s full‑scale invasion of Ukraine. Since then, there have been repeated close calls: Russian drones and warplanes edging into NATO airspace, U.S. unmanned systems operating over the Black Sea and Syria, and an almost constant risk of misunderstanding turning into escalation. Now, the two sides say they want to avoid miscalculation and unintended escalation. The U.S. stresses that such dialogue is “an important factor in global stability and peace, which can only be achieved through strength,” and that it will increase transparency and help de‑escalate. Diplomacy, or nuclear‑treaty bargaining? The announcement came hours after the New START treaty expired, leaving the U.S. and Russia without a formal cap on their nuclear arsenals for the first time in half a century. Russia has said it still wants to talk, and the Kremlin has offered to keep observing the treaty’s limits — but only if the U.S. responds positively. Axios reports that negotiators were closing in on a deal in Abu Dhabi to keep key provisions in place while both sides work toward a new framework, which Trump has described as a “new, improved, and modernized” treaty. The Trump factor President Donald Trump, who has repeatedly called for closer ties with Moscow, framed the move as a win for his approach: normalizing relations with Russia while pressing for a Ukrainian peace deal and a new arms‑control framework. But in practice, the renewed hotline is less about friendship and more about necessity: when two nuclear powers hover over the same war zone, the only safe channel is one that stays open — even if both sides keep their fingers on the trigger. #USRussia#Military#NewSTART#Nuclear#Ukraine#Trump2026#Diplomacy#NATO#Hotline 📱American Оbserver - Stay up to date on all important events 🇺🇸