Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚢"Ocean7 Ranger" открывает навигационный сезон 2026 в порту Дулут.
Многоцелевое судно "Ocean7 Ranger" стало первым океанским судном, прибывшим в порт Дулут (Duluth Seaway Port Authority) в рамках открытия навигационного сезона 2026 года.
Судно доставило 33 единицы проектного груза, включая оборудование массой до 130 тонн, в терминал Clure на озере Верхнее.
Груз, загруженный в Китае и Южной Корее, был доставлен через Тихий океан, Панамский канал и Атлантику с последующим входом в систему Великих озер и реки Святого Лаврентия.
После выгрузки дальнейшую логистику, включая перегрузку и транспортировку в Альберту (Канада), обеспечивает оператор Duluth Cargo Connect.
С отраслевой точки зрения событие подчеркивает уникальную роль системы Великих озер как глубинного логистического коридора, позволяющего доставлять океанские грузы вглубь Северной Америки.
Такие маршруты особенно востребованы для проектных грузов, где важна минимизация перегрузок и оптимизация логистики.
Начало навигационного сезона также отражает сезонную цикличность региона, где открытие портов после зимнего периода формирует важный импульс для грузопотоков и региональной экономики.
📌Duluth Seaway Port Authority — основана в 1955 году, государственная портовая администрация, принадлежит штату Миннесота (США).
#projectcargo#GreatLakes#shipping#logistics#USA
🚢Операторы Great Lakes требуют пошлин на иностранные суда для защиты рынка США.
Американская отраслевая ассоциация Lake Carriers’ Association обратилась к торговому представителю США с предложением ввести сборы на суда иностранной постройки, работающие в системе Великих озёр.
Инициатива направлена прежде всего против канадских операторов, активно использующих суда, построенные за рубежом.
Предложение рассматривается в рамках расследования Section 301, охватывающего судостроительные отрасли Китая, Южной Кореи и других стран. Возможные меры включают тарифы и ограничения в случае признания наличия «избыточных мощностей».
Инициатива отражает усиление протекционизма в судоходстве, особенно в сегменте внутренней и прибрежной торговли. Американские операторы стремятся защитить флот, построенный в США, который сталкивается с более высокими капитальными затратами.
Дополнительно предложение предполагает создание фонда для субсидирования строительства и обслуживания американских судов, что может стимулировать локальное судостроение.
Таким образом, рынок Великих озёр становится ареной торгово-промышленного противостояния, где конкуренция смещается от операционных факторов к регуляторным и политическим инструментам.
📌Lake Carriers’ Association — основана в 1880 году, отраслевая ассоциация судовладельцев США, представляет операторов флота на Великих озёрах, принадлежит членам ассоциации.
#shipping#GreatLakes#trade#shipbuilding#regulation
🚢Порт Дулута ввёл в эксплуатацию реконструированный тяжеловесный причал с приёмом проектного груза.
Duluth Seaway Port Authority завершила ключевой этап 30-летней программы модернизации, официально открыв обновлённый причал Berth 10 на терминале Clure Terminal Expansion.
Событие ознаменовано заходом буксира "Meredith Ashton" с 240-футовой баржей для перевозки проектных грузов — первым судозаходом на данный участок за несколько десятилетий.
Реконструкция фактически трансформировала устаревшую зерновую инфраструктуру начала XX века в специализированный тяжеловесный хаб. После демонтажа зерновых элеваторов в 1997 году площадка последовательно развивалась, получив импульс за счёт федерального гранта TIGER ($10 млн) и последующих инвестиций.
Финальный этап стоимостью $10,5 млн, завершённый в марте 2025 года, обеспечил ввод причалов Berth 10 и 11, расширив портовые мощности по приёму судов и размещению грузов.
С инженерной точки зрения, ключевым результатом проекта стало формирование универсального тяжеловесного терминала с четырьмя причалами для обработки тяжелых и проектных грузов, интеграцией ro-ro операций и прямым железнодорожным доступом на причале, что существенно повышает эффективность обработки негабаритных и проектных грузов, снижая перегрузочные операции и время транзита.
В стратегическом разрезе Duluth Cargo Connect использует терминал как ядро мультимодальной логистики региона, усиливая роль порта Дулута как центра обработки балкерных и тяжеловесных грузов в центральной части Северной Америки. Диверсификация от традиционных навалочных грузов в сторону проектной логистики отражает общий тренд Great Lakes на расширение номенклатуры и повышение маржинальности портовых операций.
📌Duluth Seaway Port Authority — основана в 1955 году, является государственным портовым органом, управляющим портом Дулут-Супериор (штат Миннесота, США). Находится в публичной собственности и действует как независимая портовая администрация.
#ports#heavylift#projectcargo#logistics#GreatLakes
🚢Mainstay Maritime продаёт канадский бизнес Lower Lakes и шесть судов Algoma.
Американская Mainstay Maritime договорилась о продаже трёх канадских операционных компаний и шести судов под канадским флагом корпорации Algoma Central Corporation. В сделку входят активы Lower Lakes Towing и суда “Kaministiqua”, “Manitoulin”, “Robert S. Pierson”, “Saginaw”, “Michipicoten” и “Valo”. Закрытие: при стандартных условиях.
Продажа позволяет Mainstay (бывшая Rand Logistics) сосредоточиться на рынке США под действием закона Джонса (Jones Act) и реинвестировать в американский флот. Для Algoma приобретение усиливает канадский dry bulk-сегмент на Великих озёрах за счёт расширения флота и команды Lower Lakes.
С точки зрения рынка, сделка отражает стратегическую специализацию операторов по юрисдикциям (US Jones Act vs. Канада) и консолидацию регионального тоннажа в бассейне Великих озёр. Ожидается оптимизация маршрутов и повышение операционной эффективности в канадском сегменте.
📌Algoma Central Corporation — канадская судоходная компания, основанная в 1899 году, специализируется на перевозках навалочных грузов, танкерном и морском сервисном флоте. Акции обращаются на Toronto Stock Exchange; компания является публичной и принадлежит институциональным и частным инвесторам.
#GreatLakes#JonesAct#DryBulk#Algoma#ShippingDeals