Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
📈Wheat Price Outlook: Navigating Volatility & Key Levels
Wheat markets are currently experiencing a period of volatility, driven by a complex interplay of weather patterns, geopolitical factors, and market structure. This article delves into the current...
🔗Read Full Analysis
🎯 SPECIAL OFFER: 15% OFF
💸 Coupon Code: salenow15%
🚀 Upgrade to premium signals → https://markets.fxpremiere.com/en/signals?utm_source=telegram
#Commodities#Wheat#FuturesTrading
📈Wheat Prices Hold Near 573.25 Amid Black Sea Disruptions
Wheat prices are holding steady around $573.25 per bushel, supported by recent Black Sea storm disruptions despite earlier pullbacks from eight-month highs. The market remains sensitive to...
🔗Read Full Analysis
🚀 Upgrade to premium signals → https://markets.fxpremiere.com/en/signals?utm_source=telegram
#Commodities#Wheat#TechnicalAnalysis
News: #Ethiopia wheat imports to persist as rising prices, tight supply offset production gains
A new #USDA report projects that Ethiopia will continue importing about 1.4 million metric tons of #wheat despite increased domestic production, citing tight supply and surging prices. The report also notes that domestic wheat prices have risen sharply, reinforcing reliance on imports even as output grows.
Despite the expected growth in wheat production, the report warns that domestic wheat supplies remain tight, forcing millers and traders to increasingly rely on imports.
#Russia remains Ethiopia’s largest wheat supplier, accounting for 68 percent of imports, followed by #Ukraine and #Romania. Together, the three countries supplied 93 percent of Ethiopia’s wheat imports, underscoring the country’s continued reliance on Black Sea markets.
Prime Minister Abiy Ahmed has repeatedly remarked rejecting wheat import as a defining feature of Ethiopia........
Read more: https://addisstandard.com/?p=56330
🌾 EDGE MARKET LIVE
Will Wheat Futures (CBOT) close ABOVE $7.50 per bushel by May 31, 2026?
A globally tracked agricultural benchmark driven by:
• Weather volatility
• Supply chain disruptions
• Geopolitical pressure
Clear resolution based on official commodity data.
Enter the market:
https://edgemarket.ai/bnb/currencies/will-wheat-futures-cbot-close-above-750-per-bushel-by-may-31-2026/statistics/69eb1b02a9870bbf09e38f46
Predict. Trade. Stay ahead.
#Commodities#Wheat#CBOT#MacroMarkets#EdgeMarket
🚀 Wheat Futures Rise Amid US-Iran Ceasefire Concerns
Wheat futures have experienced an upward trend due to increasing concerns over the stability of the ceasefire agreement between the United States and Iran in the Middle East. Bloomberg posted on X, highlighting the market's reaction to geopolitical tensions that could impact agricultural trade routes and supply chains. Traders are closely monitoring developments as any escalation could further influence commodity prices. The fragile nature of the ceasefire has led to uncertainty in the market, prompting investors to reassess their positions in wheat futures. Analysts suggest that continued instability in the region may lead to further price fluctuations, affecting global agricultural markets.
#wheat#futures#US#Iran#ceasefire#geopolitics#commodities#agriculture#markets#trade
В прошлый четверг, 25 июня Международный совет по зерну (МСЗ) опубликовал очередной ежемесячный обзор рынка зерновых. Согласно документу, несмотря на негативное влияние пандемии COVID-19, производство зерновых по итогам 2019/2020 сельскохозяйственного года покажет отличные результаты: прогнозируется рост в 2% по сравнению с прошлым годом.
В результате его совокупный объем достигнет 2 175 млн т (против 2 137 млн т в 2018/2019 с.-х. г.) преимущественно за счет роста производства пшеницы (до 762 млн т по сравнению с 732 млн т в 2018/2019 с.-х г.) на фоне падения производства кукурузы до 1 117 млн т в 2019/2020 с.-х. г. (-12 млн т по сравнению с 2018/2019 с.-х. г.).
При этом рост производства сопровождается ростом глобального потребления, которое по итогам настоящего с.-х. г. должно составить 2181 млн т (2166 млн т. в прошлом с.-х.г.), что приведет к продолжению двухлетнего тренда сокращения запасов.
Интересно, что эксперты Совета демонстрируют уверенность в том, что 2020/2021 с.-х. г. станет лучшим с точки зрения производства зерновых за всю историю наблюдений, достигнув 2237 млн т, благодаря рекордным урожаям пшеницы и кукурузы. С учетом того, что предполагаемый рост потребления будет менее значительным (до 2218 млн т), запасы зерновых впервые за три года вырастут.
Производство соевых бобов и риса по итогам 2020/2021 с.-х. г. также должны продемонстрировать рост (на фоне определенного снижения производства в этом с.-х.г. по сравнению с 2018/2019 с.-х. г.).
Приведенные данные позволяют говорить о том, что пандемия COVID-19 практически не должна сказаться на физических объемах производства важнейших продуктов питания. Вместе с тем падение падение доходов многих развивающихся стран и стран в особой ситуации (наименее развитые, не имеющие выхода к морю и малые островные государства) может даже на фоне роста производства и ожидаемого снижения цен привести к нехватке продовольствия и кризисным явлениям. Дополнительную "негативную" лепту могут внести разрывы в цепочках поставок в случае возможного ухудшения эпидемиологической ситуации и мер по ограничению транспортного сообщения.
#internationalgrainscouncil#grains#wheat#commodities#internationalfoodsecurity#зерно#международныйсоветпозерну#международнаяпродовольственнаябезопасность#сырьевыетовары#международнаяторговля
Подробнее о докладе на странице Центра многостороннего сотрудничества и евразийской интеграции РСПП: http://рспп.рф/events/news/msz-proizvodstvo-zernovykh-v-2020-2021-s-kh-g-pobet-vse-rekordy-5ef71bf511056/