Массовая типографика контента в Django: пользовательские команды управления (Custom Management Commands)
- -Если вы работали с Django, вы наверняка использовали команду manage.py сотни раз: python manage.py runserver, migrate, createsuperuser.
Но знаете ли вы, что можете легко создавать свои собственные команды? Это один из самых мощных и недооцененных инструментов Django для автоматизации рутины. В этом посте я расскажу, что такое Management Command, зачем она нужна и как её использовать на примере реальной задачи: массовой типографики контента в базе данных.
- --
Библиотека etpgrf
++ Исходный код etpgrf-типографа доступен в нескольких репозиториях (GitHub, GitVerse, Сube2, и PyPI), распространяется под лицензией MIT, может быть установлен локально, на ваш + сайт или интегрирован в ваши проекты как Python-библиотека.
[0.1.6.post1] - 2026–03–19
Изменено
-
-
- Новый алгоритм «висячей пунктуации» (HangingPunctuationProcessor). Добавлены компенсирующие пробелы для висячих символов, чтобы избежать наложения на соседние слова. Теперь «висячие символы» (кавычки, скобки и т. п.) оборачиваются в
<span>вместе с ближайшим словом и пробелом, что обеспечивает отсутствие визуальных смещений внутри строки. Режимboth(для одновременного вывешивания в обе стороны) отключен из-за потенциальных конфликтов компенсирующих пробелов и проблем с выравниванием при использовании CSStext-justify.
+ - Новый алгоритм «висячей пунктуации» (HangingPunctuationProcessor). Добавлены компенсирующие
+ пробелы для висячих символов, чтобы избежать наложения на соседние слова. Теперь «висячие символы» (кавычки,
+ скобки и т. п.) оборачиваются в
<span>вместе с ближайшим словом и пробелом, что + обеспечивает отсутствие визуальных смещений внутри строки. Режимboth(для одновременного + вывешивания в обе стороны) отключен из-за потенциальных конфликтов компенсирующих пробелов и проблем + с выравниванием при использовании CSStext-justify.
Исправлено
-
-
- Автоматическая замена символов
x,X,х,Х, стоящих между числами, на знак умножения×, чтобы выражения вида100x100или100 х 100` корректно обрабатывались и выглядели типографски правильными (100×100или100 × 100).
+ - Автоматическая замена символов
x,X,х,Х, стоящих между + числами, на знак умножения×, чтобы выражения вида100x100или100 х 100+ корректно обрабатывались и выглядели типографски правильными (100×100или100 × 100). +
[0.1.5] - 2026–02–27
+Исправлено
+-
+
- Исправлена ошибка, из-за которой
&в исходном тексте некорректно преобразовывался + в&. Теперь&; и его маскирование (&amp;, +&lt;и т. д.) сохраняются в итоговом HTML. +
+ - Исправлена (частично) расстановка неразрывных пробелов
на границах закрывающих + тегов (например,<b>Текст</b> — словотеперь корректно обрабатывается, в<b>Текст</b> — + слово). +
+
[0.1.4] - 2026–02–03
+Изменено
+-
+
- Архитектурное улучшение: Полностью переработан механизм обработки HTML. +
- Внедрены маркеры границ узлов (
\uFFFF) при сборке текста. Это позволяет корректно + восстанавливать структуру HTML даже если длина текста изменилась в процессе обработки (например, при удалении лишних + пробелов). +
+ - Внедрены плейсхолдеры (
\uFFFC) для защищенных тегов (<code>, +<script>и др.). Теперь содержимое этих тегов физически изолируется перед обработкой, + что предотвращает «протекание» контекста (например, склеивание слов, разделенных кодом). +
+
Исправлено
+-
+
- Исправлена ошибка смещения текста при наличии спецсимволов (мнемоник) или при изменении длины + строки. + +
- Исправлена обработка кавычек, стоящих вплотную к границам тегов (например,
"<b>Текст</b>"). +
+
v0.1.3 — 2026–01–11
+Исправлено
+-
+
- Исправлена проблема с появлением лишних тегов
<html>+ и<body>при обработке фрагментов HTML (когда используется парсер +lxml). Теперь типограф автоматически определяет, был ли на входе полноценный + документ или фрагмент, и возвращает соответствующий результат. +
+
v0.1.2 — 2025–12–27
+Исправлено
+-
+
- Критическое исправление: Добавлена отсутствующая зависимость
regexвpyproject.toml. + Без неё библиотека падала при импорте. +
+
v0.1.1 — 2025–12–23
+Добавлено
+-
+
- Ссылки на зеркала репозитория (GitVerse, Gitea) в
pyproject.tomlиREADME.md. +
+ - Раздел Credits в документации. +
v0.1.0 — 2025–12–23
+Добавлено
+-
+
- Первый публичный релиз библиотеки
etpgrf.
+ -
+ Основные модули:
+
-
+
Typographer: основной класс-оркестратор.
+ Hyphenator: расстановка мягких переносов (алгоритм Ляна-Кнута).
+ QuotesProcessor: замена кавычек («ёлочки», „лапки“).
+ Unbreakables: неразрывные пробелы для предлогов, союзов и частиц.
+ LayoutProcessor: типографика тире, инициалов, акронимов, единиц измерения, устойчивых + сокращений (постпозиционных и препозиционных).
+ SymbolsProcessor: псевдографика (тире, стрелочки, копирайт и т. п.)
+ HangingPunctuationProcessor: висячая пунктуация.
+ SanitizerProcessor: очистка HTML перед обработкой.
+
+ - Поддержка русского, русского дореформенного и английского языков. +
- Поддержка обработки HTML (через BeautifulSoup). +
Онлайн-типограф для веба
+Онлайн-типограф для текста и веб-публикаций
Интернет-типограф etpgrf — инструмент для подготовки текста для публикации в вебе. Расстановка неразрывных пробелов перед союзами и предлогами, замена кавычек @@ -298,6 +298,192 @@
Возможности онлайн-типографа etpgrf
+Неразрывные пробелы ( )
+
+ Автоматическая привязка предлогов, союзов, частиц («в», «на», «с», «и», «не», «бы»…) и артиклей („the“, „a“, „is“…). Парсер «видит» и связывает их со словами даже сквозь кавычки и скобки (например, и «Беда» села на мель).
+
Кавычки «ёлочки» и „лапки“
+
+ Замена машинных прямых кавычек (") на правильные русские «ёлочки» и французские „лапки“ для вложенных цитат. Поддержка английской, современной русской и русской дореформенной типографики («безъ», «въ», «надъ», «сiя»…).
+
Тире, числа и диапазоны
++ Замена дефисов на длинное тире (—) с языковой отбивкой, среднее тире (–) в числовых интервалах (1941–1945, 10–20 кг). Корректная обработка арабских и римских чисел (например, XXI век, III в. н. э.). +
+Инициалы и сокращения
++ Связывание неразрывными пробелами инициалов (А.С. Пушкин), устойчивых сокращений (ЗАО «Рога и Копыта», др. Барменталь), сокращений («и т.д.», «и др.»), знаков (§ 5, № 12) и единиц (100 руб., 50 м²). +
+Висячая пунктуация
++ Оптическое выравнивание левого и правого края текстового блока за счет выноса кавычек, скобок и тире за границу полосы набора. Идеально для крупных заголовков, цитат, выносов и врезок. +
+Санитайзер и спецсимволы
+
+ Встроенный HTML-санитайзер: очистка текста от мусорных тегов при копировании из Word/Google Docs, сброс разметки висячей пунктуации. Обработка псевдографики ((c) → ©, (tm) → ™, +/- → ±).
+
Переносы в словах
+
+ Автоматическая расстановка мягких переносов (­) в длинных словах с настраиваемым порогом длины (от 12 символов). Колонки текста аккуратно переносятся в узких блоках и на мобильных экранах без разрыва вёрстки.
+
Форматы вывода и гибкие правила
++ Поддержка HTML с мнемониками, смешанного режима и Unicode (UTF-8) для постов в соцсетях (VK, Telegram, Reddit). Любые группы правил можно гибко комбинировать, включать или отключать под конкретную задачу или проект. +
+Бесплатно и безлимитно
++ Полная свобода использования без ограничений по объёму текста, без регистрации, подписок и рекламы. Доступен как онлайн-сервис, так и в виде открытой библиотеки для Python по лицензии MIT. +
++
Кому подходит типограф ETPGRF
+Контент-менеджерам и дизайнерам
++ Профессиональный визуальный ритм и читаемость текста в веб-интерфейсах, блогах, SMM-публикациях в соцсетях и электронных рассылках. +
+Веб-разработчикам и верстальщикам
++ Получайте чистый, валидный HTML-код с неразрывными пробелами и мнемониками, готовый к вставке в шаблоны, CMS и лендинги. +
+Редакторам и копирайтерам
++ Быстрая автоматическая подготовка статей, колонок и постов для публикации без рутинной ручной расстановки спецсимволов. +
++
Интеграция в проекты: Python-библиотека etpgrf
++ Вы можете свободно использовать движок etpgrf-типографа офлайн в своих Python-скриптах, Django-, FastAPI- или Flask-приложениях и сайтах: +
++ Подробная документация и исходный код библиотеки открыты на GitHub и PyPI. +
++
-