@EuropeanTribalism · Post #1862 · 05.11.2025 г., 18:12
Gauntlet from the parade armor of Henry III of France, made around 1560. #artifacts @EuropeanTribalism
Hashtags
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
Пребарај: #artifacts
@EuropeanTribalism · Post #1862 · 05.11.2025 г., 18:12
Gauntlet from the parade armor of Henry III of France, made around 1560. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1837 · 20.05.2025 г., 15:18
On the Schöningen Double-Pointed Sticks In Schöningen, Germany, archaeologists found double-pointed sticks, crafted 200,000 years ago by early Europeans, likely Neanderthals. These slender wooden tools, possibly throwing sticks, showcase precise craftsmanship. Sharpened at both ends, they reflect sophisticated woodwork and hunting skill. Their balanced design suggests aerodynamic mastery for small prey. Preserved in sediment, these artifacts highlight Europe’s ancient ingenuity. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1592 · 30.04.2023 г., 16:14
Scythian Gold Goryt Overlay (4th century BC). It was found in Chertomlyk Barrow near Nikopol, Dnieper Area, Russia. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1583 · 25.04.2023 г., 17:34
Altar dedicated to the divine twins Mars and Venus. Marble, Roman artwork of the end of the reign of Trajan (98-117 AD), later re-used under the Hadrianic era (117-132 AD) as a base for a statue of Silvan. From the portico of the Piazzale dei Corporazioni in Ostia Antica. Shown in museum of Palazzo Massimo alle Terme, Rome, Italy #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1582 · 25.04.2023 г., 05:33
A 5th Century BC; Scythian gold ritual vessel with relief images of griffins, lions, horses and deer, from the Bratolyubivka Burial Mound, Kherson Region, Ukraine. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1567 · 02.04.2023 г., 07:51
Figure of Swastika on a Corinthian Silver Coin (550–500 BC) National Archaeological Museum, Athens #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1551 · 09.03.2023 г., 07:47
On swastikas (18) In 2020 scientists discovered a trove in Denmark, which contained around one kilogram of gold artifacts. Among these items there was a disc depicting the Norse god Odin. The interesting thing is, that this disc can be dated to the 5th century A.D., and is thus the oldest trace of Odin worship which was ever found. The runic inscription on the disc reads "He is Odin's man". Interestingly the swastika is clearly depicted next to Odins head in the center of the disc. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1521 · 03.02.2023 г., 13:39
Parade armor and tack made for King Erik XIV. of Sweden, around 1562 A.D. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1517 · 30.01.2023 г., 10:37
Mycenaean daggers, dating back to roughly 1600 B.C. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1512 · 23.01.2023 г., 17:27
Venus of Laussel, c. 23-25,000 years old, found in Marquay, Dordogne, France. Low relief on limestone block, height 18⅛ " Museum of Aquitaine, Bordeaux, France. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1502 · 10.01.2023 г., 07:53
The back of an ancient Greek mirror (2nd-1st Century BC) depicting the Goddess Aphrodite preparing to hit Eros with a sandal as punishment for breaking a vase. #artifacts @EuropeanTribalism
Hashtags
@EuropeanTribalism · Post #1450 · 03.11.2022 г., 16:10
These Roman drinking cups were found in Denmark and date back to the 2nd to 3rd century B.C. #artifacts @EuropeanTribalism
Hashtags