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

Пребарај: #tver

当前筛选 #tver清除筛选

🛡️ Tver: El principado olvidado que casi domina la Rus en el siglo XV En la primera mitad del siglo XV, la histórica ciudad de Tver —situada a orillas del río Volga, al noroeste de Moscú— vivió su último gran momento de poder como principado independiente bajo el gobierno de Boris Alexandrovich (1425-1461). Fue una etapa de prosperidad, construcción y diplomacia que muchos rusos recuerdan con nostalgia como un breve destello de grandeza antes de que Moscú impusiera su hegemonía sobre toda la Rus del Norte. 📍Construcción y esplendor urbano Durante el mandato de Boris Alexandrovich, Tver se transformó: se levantó un palacio principesco de piedra dentro del Kremlin —el segundo de este tipo en la región después del de Bogolyubovo— y se erigieron templos y campanarios de piedra que realzaron la importancia espiritual y cultural de la ciudad. Entre ellos: la catedral dedicada a Juan el Misericordioso (1420), las iglesias de San Boris y San Gleb (1438) y del Arcángel Miguel (1455), además de templos en los monasterios de Fedorovsky y Zheltikov. 📈Economía, comercio y aventuras lejanas La ciudad no solo fue muros y catedrales. Su auge económico se apoyó en intensos lazos comerciales y actividad diplomática. Por ejemplo, el famoso viajero Afanasy Nikitin —que emprendió la legendaria travesía hacia India entre 1466 y 1474— partió desde estas tierras, llevando la curiosidad rusa más allá de Asia Central. La presencia del embajador de Tver en el Concilio de Florencia también subraya la ambición internacional del principado. 💍Alianzas dinásticas con Moscú (y tensiones) En 1452, la hija de Boris de Tver, María Borisovna, se casó con Ivan Vasilievich, futuro gran príncipe y luego Iván III de Moscú. Este matrimonio unió temporalmente a dos fuerzas rusas poderosas, pero también marcó el inicio de una relación compleja entre ambos principados. ⚔️El fin de un sueño independiente Mientras Moscú crecía en poder, Tver trató de mantener su autonomía mediante alianzas con Lituania y Novgorod, movimientos que terminaron siendo desventajosos. En 1485, después de semanas de tensión creciente, Iván III movilizó su ejército y ocupó Tver sin grandes combates; el príncipe Mijail Borisovich huyó hacia Lituania, y el principado dejó de existir como entidad política independiente. La caída de de este principado simboliza el paso de la fragmentación feudal a la centralización del estado ruso bajo Moscú. Aunque siguió siendo un centro comercial y cultural relevante en siglos posteriores, su era de independencia terminó aquí, marcando un punto de inflexión en la historia de la Rusia medieval. #HistoriaRusa#Tver#SigloXV#IvanIII#RusMedieval Apóyanos pulsando👉'BOOST'👈 🖥https://vamosarusia.com 💬@vamosarusia