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

Резултати

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

Пребарај: #peoplearekey

当前筛选 #peoplearekey清除筛选
Russians against war Vienna

@raw_vienna · Post #638 · 24.02.2026 г., 16:37

22 февраля мы вновь вышли на центральную площадь Вены с чётким и настойчивым призывом — продолжать поддерживать Украину и её народ в условиях опустошительной войны. Мы показали последствия военных преступлений Кремля, рассказали о инициативах, которые помогают людям на местах, и говорили о том, как российская власть всё дальше уходит от демократических ценностей — с катастрофическими последствиями для россиян, ростом политических репрессий и угрозой для всей Европы. В поддержку международной кампании #PeopleFirst мы провели перформанс #PeopleAreKey и потребовали немедленного и безоговорочного освобождения узников Кремля: пленников войны, незаконно удерживаемых украинских гражданских лиц, политических заключённых, а также возвращения всех депортированных украинских детей. Спасибо каждому, кто был с нами в этот день 🤍 И отдельная благодарность нашей замечательной певице — её голос наполнил акцию теплом, человечностью и солидарностью. Вместе мы сильнее!

Поддержите нашу кампанию в соц. сетях! Мы, антивоенные активисты, правозащитники, все, кто выступает против войны, в свете приближающейся встречи президента США Дональда Трампа и Владимира Путина, опасаемся, что эта встреча может привести к заключению тактического краткосрочного соглашения, которое может нанести непоправимый ущерб Украине, Европе и международной безопасности, а судьбы людей, находящихся в плену, не станут приоритетом соглашения сторон. Мы хотим привлечь внимание к жизни всех и каждого незаконнозадержанного – украинских гражданских, депортированных украинских детей, украинских военнопленных и российских политзаключенных, оказавшихся в заключении за свою антивоенную позицию. Мы приглашаем вас присоединиться к нашему флешмобу, чтобы вернуть внимание к жизням людей и требовать безусловного освобождения всех узников этой войны. Напишите Free people first на ладони вашей руки и выложите фотографию в социальные сети. Присылайте ваши фото в бот t.me/People1rst_bot. ————— Підтримайте нашу кампанію в соцмережах! Ми, антивоєнні активісти, правозахисники та всі, хто виступає проти війни, з огляду на майбутню зустріч президента США Дональда Трампа та Володимира Путіна, переймаємося, що ця зустріч може призвести до укладення тактичної короткострокової угоди, яка може завдати непоправної шкоди Україні, Європі та міжнародній безпеці, а доля полонених не буде пріоритетом для сторін. Ми хочемо привернути увагу до життя кожного й кожної з числа незаконно поневолених — українських цивільних осіб, депортованих українських дітей, українських військовополонених та політичних в'язнів, які були ув'язнені за свою антивоєнну позицію. Ми запрошуємо вас приєднатися до нашого флешмобу, щоб привернути увагу до життя людей і вимагати безумовного звільнення всіх бранців російської війни в Україні. Напишіть Free people first на долоні своєї руки та викладіть фото в соціальні мережі. Надсилайте свої фото в бот t.me/People1rst_bot. ————— Support our campaign in social media We, anti-war activists, human rights defenders, and all those who oppose war, in light of the upcoming meeting between US President Donald Trump and Vladimir Putin, fear that this meeting could lead to a tactical short-term agreement that could cause irreparable damage to Ukraine, Europe and international security, and that the fate of those held captive will not be a priority for the parties to the agreement. We want to draw attention to the lives of each and every one of those illegally detained — Ukrainian civilians, deported Ukrainian children, Ukrainian prisoners of war and Russian political prisoners who have been imprisoned for their anti-war stance. We invite you to join our flashmob to draw attention back to people's lives and demand the unconditional release of all prisoners of this war. Write Free people first on the palm of your hand and post a photo on social media. Send your photo to our bot t.me/People1rst_bot. #People1st#BringPeopleHomeFirst#ЛюдиПревышеВсего#PeopleAreNotNegotiable#PeopleAreKey#ЛюдиKлючові#FreePeopleFirst#FreeThemAll