Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
News: #Ethiopian Cargo to join Freightos digital booking platform by end of March
Addis Abeba — Ethiopian Airlines #Cargo & Logistics Services will join the digital booking platform operated by Freightos by the end of March, allowing freight forwarders to access rates, quotes, bookings and payment services across the airline’s global cargo network.
The development, according to a report by The STAT Trade Times, will enable freight forwarders using the WebCargo platform to search, quote, and book cargo capacity on Ethiopian Cargo through a digital interface.
Freightos said the integration will provide digital rates, quoting and eBooking capabilities, along with WebCargo Pay for digital payments and interlining functions. The move connects Ethiopian Cargo’s network with the Freightos digital booking system used by freight forwarders to secure airline cargo capacity.
https://www.stattimes.com/air-cargo/ethiopian-cargo-joins-freightos-platform-for-digital-booking-access-1358382
🎥 Вышел новый ролик, в котором генеральный директор "Курьерской Службы КСЭ" в Санкт-Петербурге рассказывает о работе с калькулятором в Cargo.
Этот инструмент – настоящая находка для наших менеджеров и партнеров!
✅ Возможности калькулятора в Cargo:
1️⃣Подготовка коммерческих предложений из любых населённых пунктов в любой населённый пункт с градацией по весу и срочностям;
2️⃣Расчет детализаций конкурентов;
3️⃣Расчет закупочной цены франчайзи;
4️⃣Расчет группировок клиентов при изменении тарифов;
5️⃣Альтернатива калькулятору в личном кабинете (расширенный функционал).
Не упустите возможность узнать больше о том, как калькулятор в Cargo поможет в работе и повысит эффективность! Смотрите видео по ссылке и оставайтесь на связи!
#курьерсервисэкспресс#cargo#новости#инструменты#эффективность
🛰👨🚀Le correspondant spécial de l’agence TASS à la Station spatiale internationale (ISS), le cosmonaute Sergueï Koud-Svertchkov, a filmé le désamarrage du vaisseau cargo Cargo Dragon de la société SpaceX.
#espace#cosmonaute#cargo
🇺🇸Le cargo spatial Cygnus XL, de la société Northrop Grumman, s'est désarrimé de la Station spatiale internationale (ISS). La retransmission est disponible sur le site internet de la Nasa.
Le désarrimage a été effectué à 07h05 (UTC-4),
a indiqué l'animatrice de la retransmission.
Le cargo devrait quitter son orbite le 14 mars pour effectuer une rentrée destructive, se consumant dans les couches denses de l'atmosphère terrestre avec plusieurs tonnes de débris en provenance de la station.
Le cargo s’est amarré à l'ISS à la mi-septembre 2025.
#iss#cargo#désarrimage#étatsunis
📹 Опубликовано видео момента крушения грузового самолета в США.
Кадры, снятые очевидцами, показывают, как McDonnell Douglas MD-11 с горящим крылом теряет высоту и взрывается при ударе о землю. Катастрофа произошла вечером 4 ноября возле аэропорта Луисвилля.
В компании UPS пока не комментируют судьбу трех членов экипажа. Основная версия — отказ двигателя при взлете.
За видео спасибо подписчику 🙏✈️
#самолет#mcdonnel#авиация#сша#cargo#авиакатастрофа
Ассалому Алайкум!
Уважаемые друзья. Поздравляем Вас с днём независимости Узбекистана. Желаем Всем развитие и процветания в бизнесе. Ровно 28 лет назад Мы стали независимыми. Мы так благодарны за мирное небо!
Мы любим Вас!🎉🎉🎉#28ёшдамиз#28yoshdamiz#mustaqillik#uzbekistan#cargo#china
Почта: [email protected]
Сайт: www.totrans.uz
Канал: https://t.me/joinchat/AAAAAEnQ5X0U6tzGfb2QQg
https://docs.pipenv.org/
#Pipenv — the officially recommended #Python#packaging tool from Python.org, free (as in freedom).
Pipenv is a tool that aims to bring the best of all packaging worlds (#bundler, #composer, #npm, #cargo, #yarn, etc.) to the Python world. #Windows is a first–class citizen, in our world.
It automatically creates and manages a #virtualenv for your projects, as well as adds/removes #packages from your #Pipfile as you install/uninstall packages. It also generates the ever–important Pipfile.lock, which is used to produce deterministic builds.
Сегодня в Ташкентской области состоялся важный этап в сотрудничестве Казахстана и Узбекистана — главы двух государств дали старт строительству первой очереди логистического центра Silkway Central Asia🚀🤝
Проект реализуется совместным предприятием SILKWAY Central Asia и предусматривает развитие железнодорожной, контейнерной и складской инфраструктуры на участке площадью 159 га🚂📦
Центр станет частью Срединного коридора и усилит возможности региона в международной логистике 🌍✨
Строительство ведётся по графику, на объекте продолжаются ключевые подготовительные работы 👷♂️🧱
После ввода в эксплуатацию комплекс обеспечит до 700 рабочих мест и создаст новые условия для развития бизнеса и торговли 💼📈
#PTCHolding#SilkwayCA#SilkwayCentralAsia#Logistics#MiddleCorridor#Transport#Infrastructure#Kazakhstan#Uzbekistan#Cargo#RailFreight#Multimodal
https://ptc-holding.kz/press-center/prezidenty-kazahstana-i-uzbekistana-zapustili-stroitelstvo-pervoj-ocheredi-silkway-central-asia/