Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#1960е
Есть тут поклонники сериала "Разделение"? Сегодня выходит последняя серия второго сезона.
Наравне с персонажами одним из действующих лиц можно назвать дистопичный и загадочный офис Lumon. А это, между прочим, реальное здание – офис телекомуникационной Bell Works в Нью-Джерси. Здание построили в 1962-м году по проекту архитектора Ээро Сааринена как технологический инкубатор. С 1962 по 2007 год в здании Bell Works работало более 6000 сотрудников, в том числе несколько лауреатов Нобелевской премии. Теория лазера, как и теория Большого взрыва, возникли именно там. И туда же был совершён первый звонок по мобильному телефону.
В сериале фигурирует парковка, фасад и входной атриум Bell Works, а вот знаменитые белые офисы и бесконечные корридоры были созданы на студии.
#1960е
Такие киоски К67 стояли по всей Югославии, а также в СССР, США и многих странах Восточного блока в 60-80-ые. Сделанные из стекловолкна и модульные, эти киоски были крайне универсальные. В них можно было размещать хоть продажу овощей, хоть газет, делать будки на стоянках или открывать кафе. Отдельные киоски можно было стыковать между собой бесконечно, изменять отдельные элементы типа полок, витрин и окон. К67 придумал дизайнер Саша Мехтиг из Словении, чтобы киоск был удобным, легко встроенным в городскую жизнь и приспособленным для массового производства. И действительно: К67 служили точками притяжения и создания активности, в немалой степени благодаря своему красному цвету.
#1940е#1960е
В Золотой и Серебряный век комиксов было немало дурацких персонажей, над историей происхождения которых авторы не особо заморачивались. Многих таких первых супергероев уже забыли, а другим после меняли легенду и адаптировали под новых "носителей" с более адекватной предысторией. Так, у знаменитого Зелёного Фонаря Алана Скотта было забавное начало. Его спасает от рушащегося моста живое пламя из космоса, которое находится в фонаре, созданном бывшим пациентом психушки. Прекрасно же, но сейчас эту историю, кажется, предпочитают не вспоминать. Вот ещё 3 чудных происхождения супергероев.
Крипер (Showcase#73, 1967) - Репортер Джек Райдер надевает яркий костюм, чтобы пробраться на вечеринку, но, когда получает ранение, сумасшедший ученый имплантирует Джеку под кожу устройство преобразования материи. Оно позволяет Джеку превращаться в дикого дальтоника-супергероя.
Метаморфо (The Brave and the Bold #57, 1965) - авантюрист Рекс Мейсон был нанят, чтобы найти Сферу Ра, но его вырубает парень, похожий на пещерного человека, подвергают воздействию облученного метеорита и превращают в монстра со способностью обращаться во все виды стихий — но не обратно в Рекса.
Уиззер (USA Comics #1, 1941) - Боб Фрэнк вместе с отцом сбегает в Африку от гангстеров и умирает там от лихорадки. Отец делает ему переливание крови мангуста, отчего Боб развивает суперскорость и решает бороться с бандитами.
#1920е#1960е#1970е#1980е
Что почитать в расслабленную субботу.
История некоторых амбициозных, но нереализованных архитектурных проектов в СССР.
https://vatnikstan.ru/culture/arh-utopii/
В Инстаграме есть такой аккаунт, LGBT History, созданный двумя энтузиастами Мэтью Римером и Лейтоном Брауном. Когда-то это была коллекция фотографий с прайдов и квир-активизма, а теперь – большой проект. За годы его ведения авторы исследовали историю американского движения за права квиров вдоль и поперёк, общались со многими знаковыми личностями – в общем, в какой-то момент стало очевидно, что пора писать книгу.
“Мы везде: Протест, сила и гордость в истории квир-освобождения” (2019) начинается как очередной фотоальбом с фотографиями с прайдов и протестов, но на самом деле это объёмная и обширная летопись квир-активизма, от 1920х до конца 1990х годов, с опорой на архивные материалы и личные интервью.
Такой взгляд хорошо показывает, что Стоунволл хоть и был значимым событием, не стал отправной точкой, как многие считают – и авторы это хорошо показывают.
Что ещё они хорошо показывают, так это неоднородность квир-движения и все вызванные этим противоречия: геи против лесбиянки, лесбиянки против транс-людей, транс-люди против и тех, и других, и все вместе – против бисексуалов. Не все активисты, разумеется: Ример и Браун показывают множество прекрасных людей, которые делали всё возможное, чтобы примирить и объединить сообщество.
Некоторые лица, впрочем, либо не упомянуты вовсе, либо упомянуты вскользь, как Сторме ДеЛарвери. Иногда авторы слишком уж скачут по событиям, не уделяя должного внимания последствиям (или их отсутствию), но это, наверное, неизбежно, учитывая масштабы.
Зато всё изложено легко, но не поверхностно. Главное – запомнить множество имён.
Мне кажется, это хороший, даже вдохновляющий вариант для тех, кто хочет поглубже познакомиться с квир-активизмом США и, возможно, понять кое-какие вещи, происходящие сейчас.
Книга очень тяжёлая (под 400 мб), поэтому делюсь ссылкой на скачивание
Подписаться | #книги#рекомендации#США#1920е#1950е#1960е#1970е#1980е#1990е