From f64b7d87991e85abbc1d5a32331a93b5789a1d04 Mon Sep 17 00:00:00 2001 From: erjemin Date: Mon, 2 Mar 2026 22:43:29 +0300 Subject: [PATCH] =?UTF-8?q?tmp:=20=D0=9C=D0=B0=D1=81=D1=81=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B3=D1=80=D0=B0=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=20=D0=B2=C2=A0Django:=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=C2=AD=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20?= =?UTF-8?q?=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?(=D0=B2=D1=91=D1=80=D1=81=D1=82=D0=BA=D0=B0=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=81=D0=BE=D1=87=D0=BD=D0=B8=D1=86=D0=B5=20fin2).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etpgrf_site/blog/templates/blog/tmp.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/etpgrf_site/blog/templates/blog/tmp.html b/etpgrf_site/blog/templates/blog/tmp.html index 595226c..b083b67 100644 --- a/etpgrf_site/blog/templates/blog/tmp.html +++ b/etpgrf_site/blog/templates/blog/tmp.html @@ -80,8 +80,8 @@ python manage.py hello Иван
 Привет, Иван!

Реальный пример: Массовая типографика через etpgrf

-

В моём проекте, DQ – коллекция цитат. Место для вдумчивого чтения, контент был частично обработан с помощью Типографа Муравьёа, частично вручную. И вот я установил и настроил etpgrf (тем более что Типограф Муравьева «почил в бозе», да и до того не обновлялся с 2018 года). Все новые цитаты типогра­фируются через etpgrf, но что делать со старыми? Их сотни, и открывать и «пересо­хранаять» каждую вручную — это адский труд. Вот тут на помощь и приходит Custom Management Command.

-

Вот как я это реализовал: в web/management/commands/reprocess_typography.py:

+

В моём проекте, DQ – коллекция цитат: место для вдумчивого чтения, контент был частично обработан с помощью Типографа Муравьёа, частично вручную. И вот я установил и настроил etpgrf (тем более что Типограф Муравьёва «почил в бозе», да и до того не обновлялся с 2018 года). Все новые цитаты типогра­фируются через etpgrf, но что делать со старыми? Их сотни, и открывать и «пересо­хранаять» каждую вручную — это адский труд. Вот тут на помощь и приходит Custom Management Command.

+

Вот как я это реализовал. В web/management/commands/reprocess_typography.py:

 from django.core.management.base import BaseCommand
 from web.models import TbDictumAndQuotes
@@ -150,14 +150,14 @@ class Command(BaseCommand):
 
 
         self.stdout.write(self.style.SUCCESS(f"\nГотово!"))
-

Возможно вы заметили, что в моем проекте для контента есть два поля: szContent и szContentHTML. В первом хранится «сырой» текст, во втором — результат типогра­фирования. В вашем проекте, скорее всего только одно поле для контента, но по сути это ничего не меняет.

+

Возможно вы заметили, что в моем проекте для контента есть два поля: szContent и szContentHTML. В первом хранится «сырой» текст, во втором — результат типогра­фирования. В вашем проекте, скорее всего, только одно поле для контента, но по сути это ничего не меняет.

Еще интересные фишки, которые исполь­зовались при типогра­фировании:

  1. self.stdout.write вместо print – позволяет Django перехва­тывать вывод (например, для тестов) и корректно работать с кодировками.
  2. self.style.SUCCESS и self.style.ERROR – раскрашивает текст в консоли (зеленый/красный) и это очень удобно для визуального восприятия логов.
  3. -
  4. Аргумент –dry-run — позволяют безопасно тестировать скрипт на продакшене перед тем, как реально менять данные.
  5. -
  6. Аргументы –limit и –offset — позволяют обрабатывать базу «порциями», что полезно для больших объемов данных (можно запустить несколько процессов параллельно с разными offset).
  7. -
  8. Используется update_fields – позволяет переза­писывать не всю модель целиком (что могло бы затереть изменения, сделанные кем-то другим в ту же секунду), а обновляем только конкретные поля.
  9. +
  10. Аргумент --dry-run — позволяют безопасно тестировать скрипт на продакшене перед тем, как реально менять данные.
  11. +
  12. Аргументы --limit и --offset — позволяют обрабатывать базу «порциями», что полезно для больших объемов данных (можно запустить несколько процессов параллельно с разными offset).
  13. +
  14. Используется update_fields — позволяет переза­писывать не всю модель целиком (что могло бы затереть изменения, сделанные кем-то другим в ту же секунду), а обновляем только конкретные поля.

Теперь, чтобы типогра­фировать весь контент, нам достаточно одной строку в терминале, и Django сделает всю грязную работу за нас (не забудьте инициировать виртуальное окружение вашего проекта).

Тестовый прогон (безопасно, ничего не сохраняет):