mod: улучшено SEO
This commit is contained in:
@@ -1,6 +1,18 @@
|
||||
from django.contrib.sitemaps import Sitemap
|
||||
from django.urls import reverse
|
||||
from .models import Post
|
||||
|
||||
class StaticViewSitemap(Sitemap):
|
||||
"""Карта сайта для статических страниц (главная и др.)."""
|
||||
priority = 1.0
|
||||
changefreq = "daily"
|
||||
|
||||
def items(self):
|
||||
return ['index']
|
||||
|
||||
def location(self, item):
|
||||
return reverse(item)
|
||||
|
||||
class PostSitemap(Sitemap):
|
||||
changefreq = "weekly" # Как часто меняются страницы
|
||||
priority = 0.9 # Приоритет (от 0.0 до 1.0)
|
||||
|
||||
@@ -4,51 +4,314 @@
|
||||
{% block title %}Песочница верстки — ETPGRF{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
|
||||
{# Левая колонка: Дата и Картинка #}
|
||||
<div class="col-lg-2 align-self-start text-end mb-4">
|
||||
<p class="small align-self-end">
|
||||
<small class="bg-secondary bg-opacity-10 p-2 text-nowrap">
|
||||
12.фев.2026
|
||||
</small>
|
||||
</p>
|
||||
<p>
|
||||
<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100" alt="Django Admin" />
|
||||
</p>
|
||||
<div class="row align-items-start">
|
||||
<div class="col border-end">
|
||||
<h3>Сайт typograph.cube2.ru</h3>
|
||||
|
||||
<p>Исходный код сайта онланй-типографа <tt>etpgrf</tt> доступен в нескольких репози­ториях (<a
|
||||
href="https://github.com/erjemin/etpgrf-site" target="_blank">GitHub</a>, <a
|
||||
href="https://gitverse.ru/erjemin/etpgrf-site" target="_blank">GitVerse</a> и <a
|
||||
href="https://git.cube2.ru/erjemin/2026-etpgrf-site" target="_blank">Сube2</a>. Наиболее заметные изменения
|
||||
сайта онлайн-типографа приводятся ниже в хронологическом порядке. Для полного списка изменений,
|
||||
включая мелкие фиксы и коммиты, пожалуйста, обратитесь к истории репозитория.</p>
|
||||
|
||||
<h4>[0.2.8] - 2026–10–04</h4>
|
||||
<h5>Добавлено</h5>
|
||||
<ul>
|
||||
<li>Локальная статика для внешних фронтенд-библиотек (Bootstrap 5, Bootstrap Icons, HTMX, Alpine.js,
|
||||
CodeMirror 6) для работы интер­фейса при недос­тупности CDN.
|
||||
</li>
|
||||
<li>Стратегия fallback-подключения в шаблонах: автома­тическое переклю­чение на локальную
|
||||
статику при сбое или блокировке CDN.
|
||||
</li>
|
||||
<li>Скрипт копиро­вания production-ассетов <code>frontend-assembly/copy-vendor.js</code>
|
||||
и обновление сборки через <code>frontend-assembly/assembly_via_npm.sh</code>.
|
||||
</li>
|
||||
<li>Автомати­ческие тесты проверки наличия стати­ческих вендорных ассетов и коррект­ности
|
||||
ренде­ринга fallback-подключений в <code>typograph/tests.py</code>.
|
||||
</li>
|
||||
</ul>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>Обновлен и структу­рирован <code>.gitignore</code> с подроб­ными коммен­тариями.</li>
|
||||
</ul>
|
||||
|
||||
<h4>[0.2.7] - 2026–03–22</h4>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>Обновление всех пактов, включая <tt>etpgrf</tt> (v0.1.5 → v0.1.6.post1).</li>
|
||||
</ul>
|
||||
<h4>Исправлено</h4>
|
||||
<ul>
|
||||
<li><code>canonical</code> для страниц учитывает https/http.</li>
|
||||
</ul>
|
||||
|
||||
<h4>[0.2.6] - 2026–02–28</h4>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>Подключена новая версия библиотеки <tt>etpgrf</tt> (v0.1.4 → v0.1.5).</li>
|
||||
</ul>
|
||||
|
||||
<h4>[0.2.5] — 2026–02–13</h4>
|
||||
<h5>Добавлено</h5>
|
||||
<ul>
|
||||
<li>Редизайн списка постов в блоге: шахматный порядок, вертикальные разделители, улучшенная адаптивность
|
||||
для мобильных
|
||||
устройств.
|
||||
</li>
|
||||
<li>Поле <code>updated_at</code> (<em>Дата обновления</em>) в модели, админке, блогах, страницах, <tt>sitemaps.xml</tt>
|
||||
и микро­разметке <tt>Schema.org</tt> для улучшения <abbr
|
||||
title="Search Engine Optimization / Поисковая оптимизация">SEO</abbr>, <abbr
|
||||
title="Generative Engine Optimization / Оптимизацию для Генеративных нейросетей и ИИ-поисковиков">GEO</abbr>
|
||||
и <abbr title="Large Language Model Optimization / Оптимизация под Большие Языковые Модели">LLMO</abbr>.
|
||||
</li>
|
||||
<li><tt>README.md</tt> с описанием проекта онлайн-типографа, его особенностей, технического стека и инструкциями
|
||||
по установке и запуску.
|
||||
</li>
|
||||
<li>Отображение заголовков постов в списке админки без HTML-мнемоник (декоди­рование <code>&nbsp;</code>
|
||||
и др.).
|
||||
</li>
|
||||
</ul>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>Исправлены ошибки в шаблоне <tt>post_list.html</tt> (и полностью переработан дизайн в целом).
|
||||
<ul>
|
||||
<li>Улучшено отображение даты и скрытие декоративных изображений в списке постов на мобильных
|
||||
устройствах.
|
||||
</li>
|
||||
<li>Оптими­зированы отступы и типографика в списке постов.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Формирование <code>slug</code> из <code>title</code> при сохранении поста или страницы с исполь­зованием
|
||||
библиотеки <code>pytils</code> для трансли­терации с очистикой от HTML-мнемоник и создания
|
||||
<abbr title="Uniform Resource Locator / Унифицированный Указатель Ресурса">URL</abbr>-дружес­твенных
|
||||
строк.
|
||||
</li>
|
||||
<li>Дизайн и вёрстка страниц для постов блога и вспомо­гательных страниц для мобильных
|
||||
устройств (адаптивность, скрытие картинки-обложки).
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>[0.2.4] — 2026–02–12</h4>
|
||||
<h5>Добавлено</h5>
|
||||
<ul>
|
||||
<li>Микро­разметка <code>Schema.org</code> (JSON-LD) для постов и страниц для улучшения
|
||||
SEO и понимания контента поисковиками и ИИ.
|
||||
</li>
|
||||
<li>Файл <code>llms.txt</code> для предоста­вления информации о сайте и API для больших
|
||||
языковых моделей (<abbr title="Large Language Model">LLM</abbr>) в соответвиии со стандартом GEO
|
||||
и LLMO.
|
||||
</li>
|
||||
<li>Кастомный фильтр <code>unescape</code> для очистки мета-тегов от HTML-сущностей и переводов
|
||||
строк.
|
||||
</li>
|
||||
</ul>
|
||||
<h5>Исправлено</h5>
|
||||
<ul>
|
||||
<li>Исправлена ошибка, при которой счетчик символов не обновлялся при восста­новлении вкладки
|
||||
из истории браузера.
|
||||
</li>
|
||||
<li>Исправлена ошибка экрани­рования кавычек в <tt>JSON-LD</tt>, <tt>Title</tt>
|
||||
и <tt>Description</tt>.
|
||||
</li>
|
||||
<li>В <code>docker-compose.yaml</code> додавлен перезапуск <code>watchtower</code> при его
|
||||
остановке.
|
||||
</li>
|
||||
</ul>
|
||||
<h4>[0.2.3] — 2026–02–11</h4>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>Добавлена кнопка очистки текста во вводном поле и счетчик вводимых символов.</li>
|
||||
</ul>
|
||||
<h4>[0.2.2] — 2026–02–03</h4>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>В онлайн-типографе подключена новая версия библиотеки <tt>etpgrf</tt> (v0.1.3 → v0.1.4).</li>
|
||||
<li>Незначи­тельные улучшения в оформлении.</li>
|
||||
</ul>
|
||||
<h4>v0.2.1 — 2026–01–30</h4>
|
||||
<h5>Исправлено</h5>
|
||||
<ul>
|
||||
<li>Исправление ошибок при формировании мета-тегов, картинок, <code>alt</code> под картинками
|
||||
и т. п.
|
||||
</li>
|
||||
<li>Исправлена ошибка в настройках nginx внутри docker-контейнера возникавшая при отдаче
|
||||
media-файлов.
|
||||
</li>
|
||||
</ul>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>При создании записи в блог или страницы «тизер» обязателен!</li>
|
||||
</ul>
|
||||
|
||||
<h4>v0.2.0 — 2026–01–28</h4>
|
||||
<h5>Добавлено</h5>
|
||||
<ul>
|
||||
<li>Приложение blog (для страниц и постов) и соответ­ствующие изменения в моделях базы,
|
||||
добавление новых view и шаблонов.
|
||||
</li>
|
||||
<li>Песочница (шаблон <code>blog/templates/blog/tmp.html</code> для тестирования верстки (доступен только в режиме
|
||||
debug).
|
||||
</li>
|
||||
<li>Динамическое создание sitemap.xml</li>
|
||||
<li>robots.txt</li>
|
||||
<li>Изменения в шапке сайта (меню и бургер)</li>
|
||||
</ul>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>Спрятан <code>url</code> админки типографа. Его расположение теперь задается через переменные окружения
|
||||
в <code>.env</code>.
|
||||
</li>
|
||||
<li><code>favicon.ico</code> оптими­зирована для Яндекс (120х120px).</li>
|
||||
<li>Исправлено поведение шапки и логотива для мобильных устройств.</li>
|
||||
</ul>
|
||||
|
||||
<h4>v0.1.8 — 2026–01–23</h4>
|
||||
Коммит:
|
||||
846c066
|
||||
|
||||
<h4>v0.1.7 — 2026–01–23</h4>
|
||||
Коммит:
|
||||
d74bee2
|
||||
|
||||
<h4>v0.1.6 — 2026–01–23</h4>
|
||||
Коммит:
|
||||
6b4dbaf
|
||||
|
||||
<h4>v0.1.5 — 2026–01–21</h4>
|
||||
Коммит:
|
||||
78174a8
|
||||
|
||||
<h4>v0.1.4 — 2026–01–20</h4>
|
||||
Коммит:
|
||||
2d09aef
|
||||
|
||||
<h4>v0.1.3 — 2026–01–19</h4>
|
||||
Коммит:
|
||||
66f2228
|
||||
|
||||
<h4>v0.1.2 — 2026–01–18</h4>
|
||||
Коммит:
|
||||
92711f5
|
||||
|
||||
<h4>v0.1.1 — 2026–01–16</h4>v0.1.1
|
||||
Коммит:
|
||||
5d5d48d
|
||||
|
||||
<h4>v0.1.0 — 2026–01–16</h4>
|
||||
Коммит:
|
||||
3a7bb29
|
||||
|
||||
</div>
|
||||
|
||||
{# Правая колонка: Контент #}
|
||||
<div class="col-lg-10 border-start ps-lg-4 post-page-content">
|
||||
|
||||
<h1>Массовая типографика контента в Django: пользова­тельские команды управления (Custom Management Commands)</h1>
|
||||
|
||||
<div class="lead bg-secondary bg-opacity-10 p-3 rounded">
|
||||
|
||||
<p>Если вы работали с Django, вы наверняка использовали команду <code>manage.py</code> сотни раз: <code>python manage.py runserver</code>, <code>migrate</code>, <code>createsuperuser</code>.</p>
|
||||
<p>Но знаете ли вы, что можете легко создавать <strong>свои собственные</strong> команды? Это один из самых мощных и недоо­цененных инструментов Django для автома­тизации рутины. В этом посте я расскажу, что такое <strong>Management Command</strong>, зачем она нужна и как её использовать на примере реальной задачи: массовой типографики контента в базе данных.</p>
|
||||
|
||||
</div>
|
||||
<hr>
|
||||
<div class="post-content mt-4">
|
||||
<div class="col border-start">
|
||||
<h3>Библиотека etpgrf</h3>
|
||||
<p>
|
||||
Исходный код etpgrf-типографа доступен в нескольких репози­ториях (<a
|
||||
href="https://github.com/erjemin/etpgrf" target="_blank">GitHub</a>, <a
|
||||
href="https://gitverse.ru/erjemin/etpgrf" target="_blank">GitVerse</a>, <a
|
||||
href="https://git.cube2.ru/erjemin/2025-etpgrf" target="_blank">Сube2</a>, и <a
|
||||
href="https://pypi.org/project/etpgrf/" target="_blank">PyPI</a>), распрос­траняется под лицензией <a
|
||||
href="https://opensource.org/licenses/MIT" target="_blank">MIT</a>, может быть установлен локально, на ваш
|
||||
сайт или интегри­рован в ваши проекты как Python-библиотека.</p>
|
||||
|
||||
<h4>[0.1.6.post1] - 2026–03–19</h4>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li>Новый алгоритм «висячей пунктуации» (<em>HangingPunctuationProcessor</em>). Добавлены компенсирующие пробелы для висячих символов, чтобы избежать наложения на соседние слова. Теперь «висячие символы» (кавычки, скобки и т. п.) оборачиваются в <code><span></code> вместе с ближайшим словом и пробелом, что обеспечивает отсутствие визуальных смещений внутри строки. Режим <code>both</code> (для одновременного вывешивания в обе стороны) отключен из-за потенциальных конфликтов компенсирующих пробелов и проблем с выравниванием при использовании CSS <code>text-justify</code>.</span></li>
|
||||
<li>Новый алгоритм «висячей пунктуации» (<em>HangingPunctuationProcessor</em>). Добавлены компенсирующие
|
||||
пробелы для висячих символов, чтобы избежать наложения на соседние слова. Теперь «висячие символы» (кавычки,
|
||||
скобки и т. п.) оборачиваются в <code><span></code> вместе с ближайшим словом и пробелом, что
|
||||
обеспечивает отсутствие визуальных смещений внутри строки. Режим <code>both</code> (для одновременного
|
||||
вывешивания в обе стороны) отключен из-за потенциальных конфликтов компенсирующих пробелов и проблем
|
||||
с выравни­ванием при исполь­зовании CSS <code>text-justify</code>.</li>
|
||||
</ul>
|
||||
<h4>Исправлено</h4>
|
||||
<ul>
|
||||
<li>Автоматическая замена символов <code>x</code>, <code>X</code>, <code>х</code>, <code>Х</code>, стоящих между числами, на знак умножения <code>×</code>, чтобы выражения вида <code>100x100</code> или <code>100 х 100` корректно обрабатывались и выглядели типографски правильными (<code>100×100</code> или <code>100&nbsp;×&nbsp;100</code>).</li>
|
||||
<li>Автоматическая замена символов <code>x</code>, <code>X</code>, <code>х</code>, <code>Х</code>, стоящих между
|
||||
числами, на знак умножения <code>×</code>, чтобы выражения вида <code>100x100</code> или <code>100 х 100</code>
|
||||
корректно обрабатывались и выглядели типографски правильными (<code>100×100</code> или <code>100&nbsp;×&nbsp;100</code>).
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
## [0.1.6] - 2024-03-19
|
||||
### Изменено
|
||||
- Н
|
||||
###
|
||||
-
|
||||
|
||||
|
||||
|
||||
<h4>[0.1.5] - 2026–02–27</h4>
|
||||
<h5>Исправлено</h5>
|
||||
<ul>
|
||||
<li>Исправлена ошибка, из-за которой <code>&amp;</code> в исходном тексте некорректно преобразовывался
|
||||
в <code>&</code>. Теперь <code>&amp;</code>; и его маскирование (<code>&amp;amp;</code>,
|
||||
<code>&amp;lt;</code> и т. д.) сохраняются в итоговом HTML.
|
||||
</li>
|
||||
<li>Исправлена (частично) расстановка неразрывных пробелов <code>&nbsp;</code> на границах закрывающих
|
||||
тегов (например, <code><b>Текст</b> — слово</code> теперь корректно обрабатывается, в <code><b>Текст</b>&nbsp;—
|
||||
слово)</code>.
|
||||
</li>
|
||||
</ul>
|
||||
<h4>[0.1.4] - 2026–02–03</h4>
|
||||
<h5>Изменено</h5>
|
||||
<ul>
|
||||
<li><b>Архите­ктурное улучшение:</b> Полностью переработан механизм обработки HTML.</li>
|
||||
<li>Внедрены <b>маркеры границ узлов</b> (<code>\uFFFF</code>) при сборке текста. Это позволяет корректно
|
||||
восста­навливать структуру HTML даже если длина текста изменилась в процессе обработки (например, при удалении лишних
|
||||
пробелов).
|
||||
</li>
|
||||
<li>Внедрены <b>плейсхолдеры</b> (<code>\uFFFC</code>) для защищенных тегов (<code><code></code>,
|
||||
<code><script></code> и др.). Теперь содержимое этих тегов физически изолируется перед обработкой,
|
||||
что предот­вращает «протекание» контекста (например, склеивание слов, разделенных кодом).
|
||||
</li>
|
||||
</ul>
|
||||
<h5>Исправлено</h5>
|
||||
<ul>
|
||||
<li>Исправлена ошибка смещения текста при наличии спецсимволов (мнемоник) или при изменении длины
|
||||
строки.
|
||||
</li>
|
||||
<li>Исправлена обработка кавычек, стоящих вплотную к границам тегов (например, <code>"<b>Текст</b>"</code>).
|
||||
</li>
|
||||
</ul>
|
||||
<h4>v0.1.3 — 2026–01–11</h4>
|
||||
<h5>Исправлено</h5>
|
||||
<ul>
|
||||
<li>Исправлена проблема с появлением лишних тегов <code><html></code>
|
||||
и <code><body></code> при обработке фрагментов HTML (когда исполь­зуется парсер
|
||||
<code>lxml</code>). Теперь типограф автома­тически определяет, был ли на входе полноценный
|
||||
документ или фрагмент, и возвращает соответ­ствующий результат.
|
||||
</li>
|
||||
</ul>
|
||||
<h4>v0.1.2 — 2025–12–27</h4>
|
||||
<h5>Исправлено</h5>
|
||||
<ul>
|
||||
<li><strong>Критическое исправление:</strong> Добавлена отсут­ствующая зависимость <code>regex</code> в <code>pyproject.toml</code>.
|
||||
Без неё библиотека падала при импорте.
|
||||
</li>
|
||||
</ul>
|
||||
<h4>v0.1.1 — 2025–12–23</h4>
|
||||
<h5>Добавлено</h5>
|
||||
<ul>
|
||||
<li>Ссылки на зеркала репозитория (GitVerse, Gitea) в <code>pyproject.toml</code> и <code>README.md</code>.
|
||||
</li>
|
||||
<li>Раздел Credits в документации.</li>
|
||||
</ul>
|
||||
<h4>v0.1.0 — 2025–12–23</h4>
|
||||
<h5>Добавлено</h5>
|
||||
<ul>
|
||||
<li>Первый публичный релиз библиотеки <code>etpgrf</code>.</li>
|
||||
<li>
|
||||
Основные модули:
|
||||
<ul>
|
||||
<li><code>Typographer</code>: основной класс-оркестратор.</li>
|
||||
<li><code>Hyphenator</code>: расстановка мягких переносов (алгоритм Ляна-Кнута).</li>
|
||||
<li><code>QuotesProcessor</code>: замена кавычек («ёлочки», „лапки“).</li>
|
||||
<li><code>Unbreakables</code>: неразрывные пробелы для предлогов, союзов и частиц.</li>
|
||||
<li><code>LayoutProcessor</code>: типографика тире, инициалов, акронимов, единиц измерения, устойчивых
|
||||
сокращений (постпо­зиционных и препози­ционных).</li>
|
||||
<li><code>SymbolsProcessor</code>: псевдо­графика (тире, стрелочки, копирайт и т. п.)</li>
|
||||
<li><code>HangingPunctuationProcessor</code>: висячая пунктуация.</li>
|
||||
<li><code>SanitizerProcessor</code>: очистка HTML перед обработкой.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Поддержка русского, русского дорефо­рменного и английского языков.</li>
|
||||
<li>Поддержка обработки HTML (через BeautifulSoup).</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user