Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Годы идут, приоритеты не меняются 🇦🇺
Qantas, флагманская авиакомпания Австралии, продолжает полагаться на Boeing 737-800 в качестве единственного узкофюзеляжного самолета в своем основном флоте.
⏺Компания является крупнейшей авиакомпанией в регионе Океании по размеру флота и количеству международных направлений, а также единственной авиакомпанией в мире, которая летает на все семь континентов благодаря антарктическим обзорным чартерам.
⏺Qantas выбрала единый тип узкофюзеляжного самолета для упрощения обучения пилотов, технического обслуживания, логистики операций и снижения общих эксплуатационных расходов
⏺Qantas недавно объявила о планах замены своего флота 737-800 на более новые Airbus A321XLR. Компания уже получила свой первый 321, хотя пока не ввела его в эксплуатацию, и списала три 737.
📌Boeing 737-800, представленный в 2002 году как часть семейства Next Generation (NG), стал самым популярным узкофюзеляжным самолетом в мире с более чем 5,200 заказанными единицами.
______
738 или всё же 321?
Лёгкое небо
#aviation#B737
Переходный этап в гражданской авиации 💙
⏺Поколение Classic в семействе самолётов Boeing 737 — это значимый и логически выверенный переходный этап между ранними моделями и более современными версиями NG и MAX.
⏺К данному поколению относятся модификации Boeing 737-300, 737-400 и 737-500. Их серийное производство началось в начале 1980-х годов и продолжалось почти два десятилетия.
⏺Classic стал своевременным ответом компании Boeing на всё возрастающие требования авиарынка к более вместительным, экономичным и одновременно более тихим узкофюзеляжным самолётам.
⏺Одним из ключевых технических новшеств стало внедрение новых турбовентиляторных двигателей CFM56, разработанных совместным предприятием General Electric и SNECMA.
⏺Эти двигатели оказались заметно тише и экономичнее по сравнению с предыдущими JT8D, использовавшимися на ранних версиях 737. Однако они были больше по диаметру.
⏺В результате конструкторам пришлось адаптировать дизайн мотогондол, придав им характерную сплюснутую форму снизу. Именно так появилась знаменитая “улыбка” Boeing под крылом — легко узнаваемая деталь, ставшая фирменной чертой Classic.
⏺Самолёты поколения 737 Classic получили полностью обновлённую кабину экипажа, более современную для своего времени авионику, а также улучшенные аэродинамические характеристики.
⏺Были увеличены объёмы топливных баков и, соответственно, дальность полёта. Это сделало самолёты более универсальными — подходящими как для коротких, так и для среднепротяжённых маршрутов.
⏺Лайнеры этой серии активно эксплуатировались крупнейшими авиаперевозчиками по всему миру, в том числе в странах СНГ и особенно в России, где они стали популярными благодаря своей надёжности.
⏺Даже сегодня, несмотря на почтенный возраст, отдельные экземпляры Boeing 737-300 и 737-500 продолжают выполнять полёты, чаще всего в грузовых вариантах или в составе чартерных авиакомпаний.
⏺Поколение Classic сыграло важную и достойную роль в истории развития гражданской авиации. Эти самолёты стали надёжным рабочим инструментом, связавшим старую и новую эпохи узкофюзеляжных авиалайнеров Boeing.
Лёгкое небо | Донат
#aviation#B737#Boeing
✈️ Факт дня | Шасси
📌Шины шасси самолёта накачаны не обычным воздухом, а азотом
🔵Причина заключается в том, что азот, которым заполняют колёса, инертен и не поддерживает горение. При посадке шины нагреваются до 200-250°C от трения, и обычный воздух с кислородом мог бы спровоцировать возгорание изнутри
🔵Шины Boeing 737 рассчитаны примерно на 300 посадок. После этого покрышку отправляют на восстановление протектора – нарезают новый рисунок. Одну шину можно восстановить до 5-7 раз, прежде чем она окончательно списывается
Лёгкое небо
#aviation#LN_fact#B737
А теперь о боинге 🥰
Альтернатива шарклетов у боинга - винглеты, поэтому речь пойдёт о них.
Винглеты — это вертикальные или изогнутые окончания крыла самолёта, которые уменьшают индуктивное сопротивление и увеличивают топливную эффективность. Их основная задача — бороться с вихрями, которые образуются на концах крыла и создают лишнюю турбулентность и сопротивление.
Один из самых узнаваемых видов винглетов — скмитары (scimitar winglets). Это модернизированные винглеты с характерным двойным изгибом. Они используются на Boeing 737 MAX и некоторых модификациях 737NG.
Что дают скимитары?
⏺Снижение расхода топлива до 2% по сравнению с обычными винглетами.
⏺Улучшение аэродинамики и дальности полёта.
⏺Красивый внешний вид, который легко узнать.
Лёгкое небо | Подписаться
#aviation#ГА#B737#Winglets
🇺🇸Boeing 737 United Airlines столкнулся с двумя машинами противообледенительной обработки в Денвере
📌6 марта Boeing 737-800 United Airlines, готовившийся к рейсу в Нэшвилл, начал руление преждевременно и ударил крыльями две противообледенительные машины. Экипаж решил, что обработка завершена и техника убрана за линии безопасности, хотя два автомобиля всё ещё стояли перед крыльями. Одна из машин от удара опрокинулась на бок
🔵По данным NTSB, пилоты были заняты разговором, когда второй пилот услышал брифинг от наземной команды и подтвердил его. Капитан не был уверен, что сообщение адресовано их рейсу. После получения разрешения на руление самолёт тронулся – наземная бригада не успела его остановить
🔵Из 136 человек на борту никто не пострадал, один сотрудник наземной службы получил незначительные травмы. Самолёт получил серьёзные повреждения крыльев, элеронов и предкрылков. Расследование продолжается
⬅️Как думаете, чья ответственность в данной ситуации – экипажа или наземной службы?
Лёгкое небо
#aviation#news#UnitedAirlines#B737#Денвер#NTSB
🟣🟣🟣🟣🟣🟣🟣🟣🟣🟣🟣🟣🟣🟣🟣🟣🟣
📌Дорогие подписчики, мы продолжаем модернизацию канала, поэтому сегодня собрали для вас глоссарий с основными хэштегами канала
Основные:
#aviation
#news
#LN_EDU
#airport
Страны:
#Россия
#Белоруссия
Остальные:
#vibe
#metar
#S7TRAINING
ВС:
#A320
#B777
#A350
#B777X
#B737
#A380
#А330
#МС21
#Ту214
#Су57
#ssj100
#B737
#B787
#drone
#аэростаты
Системы:
#Leonardo
#FFS
Компании:
#Airbus
#Boeing
#Embraer
#Cessna
#ВертолётыРоссии
#ОАК
#Росавиация
#Ростех
#winwing#winctrl
#flightradar24#fr24
#Авиатор
Авиакомпании:
#Аэрофлот
#S7#S7Airlines
#ЮТэйр
#Белавиа
#Azur
#Ямал
Аэропорты:
#Шереметьево#Sheremetyevo
#Домодедово
#Внуково
#Жуковский
#Пулково
События:
#Emergency
#деньрождения
#ковёр
#sqw7700
#MayDay
#quiz
#spotting#споттинг
#конкурс
#DubaiAirShow2025#DAS25
Профессии:
#бортпроводники
#crew
#FlightAttendant
🔵Мы непрерывно работаем над тем, чтобы каждый день радовать вас качественным контентом и удобной навигацией по каналу
⬅️Если у вас есть идеи по новым рубрикам на канале - пишите их в комментарии. Кто знает, возможно именно ваша идея будет воплощена в жизнь 👀
Лёгкое небо