Проблема
По мере развития веб-интерфейса возникает соблазн переносить бизнес-логику в HTML-шаблоны или, наоборот, формировать HTML внутри Python-кода.
Это приводит к тому, что код становится сложнее читать, тестировать и поддерживать.
Цель
Четко разделять ответственность между компонентами приложения:
- роуты принимают HTTP-запросы и подготавливают данные;
- сервисы реализуют бизнес-логику;
- шаблоны Jinja2 только отображают уже готовые данные.
Шаблоны могут содержать простые условия и циклы, необходимые для отображения интерфейса, но не должны принимать бизнес-решения.
Примеры
Допустимо:
- показать или скрыть кнопку;
- вывести сообщение в зависимости от статуса;
- пройтись циклом по списку элементов.
Недопустимо:
- вычислять, кому должен перейти заказ;
- изменять состояние очереди;
- выполнять запросы к базе данных;
- реализовывать сложные бизнес-правила.
Примечание
Простые конструкции if и for в шаблонах являются нормальной практикой.
Ишью направлена не на полный отказ от логики в Jinja2, а на предотвращение появления бизнес-логики в слое представления.
Проблема
По мере развития веб-интерфейса возникает соблазн переносить бизнес-логику в HTML-шаблоны или, наоборот, формировать HTML внутри Python-кода.
Это приводит к тому, что код становится сложнее читать, тестировать и поддерживать.
Цель
Четко разделять ответственность между компонентами приложения:
Шаблоны могут содержать простые условия и циклы, необходимые для отображения интерфейса, но не должны принимать бизнес-решения.
Примеры
Допустимо:
Недопустимо:
Примечание
Простые конструкции
ifиforв шаблонах являются нормальной практикой.Ишью направлена не на полный отказ от логики в Jinja2, а на предотвращение появления бизнес-логики в слое представления.