Перейти к основному содержимому

Шаблонизаторы

Шаблонизаторы — инструменты для автоматической генерации текстовых данных на основе шаблонов и входных данных.

Где используются

  • API-интеграции: генерация HTTP-запросов и ответов, JSON/XML-запросов (например, Mustache в OpenAPI/Swagger)
  • ESB: преобразование входящих сообщений в нужный формат (Freemarker в Apache Camel)
  • MQ: формирование сообщений перед отправкой в очередь (Jinja2 в Celery, Handlebars)
  • ETL: шаблоны для преобразования данных при загрузке в хранилище
  • Создание конфигурационных файлов для разных окружений (Helm)
  • Генерация технической документации
  • В коде: создание CRUD-операций, DTO (Data Transfer Object), API-клиентов
  • SQL: генерация динамических SQL-запросов, шаблоны для отчётов и аналитики (например, Jinja2 в dbt, Mustache в SQLAlchemy)

Примеры

Динамическое создание сценариев для разных ролей пользователей

Один шаблон описывает процесс оформления заказа, но меняются условия для разных ролей:

  • администратор может менять статус вручную
  • менеджер получает уведомление
  • клиент видит статус в личном кабинете

Вместо трёх сценариев можно использовать шаблон с переменными {role}, {action}, {notification}.
Например, с помощью Jinja2, Mustache.

Поддержка локализации

Система должна поддерживать многоязычные шаблоны отчетов и email-уведомлений (например, на основе Mustache или FreeMarker):

  • шаблон отчета содержит переменные {name}, {date_format}, {currency_format}
  • автоматически подставляются нужные значения

Гибкое преобразование данных

Форматы сообщений генерируются из шаблонов (например, FreeMarker или Jinja2):

  • для банка нужен XML-формат: шаблон payment_template.xml
  • для маркетинговой платформы JSON: шаблон email_template.json
  • для ERP CSV-файл: шаблон orders_template.csv

Если банк меняет XML-структуру, достаточно обновить шаблон, а не переделывать всю интеграцию.

Примеры шаблонизаторов

Mustache — универсальный шаблонизатор.

Используется для API, UI, конфигураций, доступен для различных языков программирования, включая JavaScript, Python и Ruby.

Как можно использовать

Разработка микросервисного API для обработки заказов

Проблема:

  • API-документация устаревает, обновляется вручную
  • требуется дополнительное время на написание Swagger/OpenAPI-описаний
  • разные версии API требуют дублирования документации

Использование Mustache:

  • создается шаблон документации, где параметры API (методы, URL, заголовки) подставляются динамически
  • Swagger/OpenAPI автоматически заполняется актуальными значениями
  • любое изменение в коде API сразу отражается в документации

Helm — шаблонизатор для Kubernetes

Позволяет управлять развертыванием приложений с помощью шаблонов YAML-файлов конфигураций (манифестов)

Как можно использовать

Инфраструктура микросервисов развернута в Kubernetes.
Для каждого микросервиса нужно создавать манифесты, указывать порты, ресурсы, окружение.

Проблема:

  • у каждого сервиса свои параметры, но структура файлов YAML повторяется
  • редактирование конфигураций вручную
  • ошибки при копировании и изменении параметров

Использование Helm:

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

FreeMarker — шаблонизатор на Java

Используется для генерации текстовых выходных данных (HTML, конфигурационные файлы и исходный код).

Как можно использовать

Разработка веб-приложения
Нужно динамически формировать HTML-страницы с балансом счета, историей операций и персонализированными предложениями.

  1. Динамическая генерация страниц (баланс, последние транзакции) с неизменной версткой
    Пример решения с FreeMarker:
    Контроллер Spring Boot передаёт в шаблон FreeMarker объект пользователя с балансом и историей операций.
    FreeMarker подставляет данные в HTML и формирует готовую страницу.

    • если баланс больше 100 000₽, показывается статус «Премиум-клиент»
    • если меньше 1000₽, предлагается «Пополнить баланс»
    • история платежей подставляется в виде таблицы с циклом
  2. Персонализация контента: разные предложения для пользователей
    Пример решения:
    В шаблоне используются условия <#if> — если клиент VIP, добавляется блок с индивидуальными предложениями.
    Контент обновляется без изменения логики бэкенда.

    • обычный клиент: «Оформите кредит под 10%»
    • VIP-клиент: «Специальное предложение: кредит под 5%»
  3. Повторное использование компонентов (хедер, меню, подвал) без копирования вручную
    Общие шаблоны (layouts) с подключением через include. Если нужно изменить меню — правится один файл.

    • все страницы используют один header.ftl[^1] с логотипом и навигацией
    • в footer.ftl хранится контактная информация
    • основной шаблон (base.ftl) объединяет их в одну структуру

Другие шаблонизаторы

  • Jinja2 — мощный и гибкий шаблонизатор для Python, широко используемый во фреймворках (Flask, Django)
  • JinjaSQL — расширение Jinja2 для генерации SQL-запросов в Python. Позволяет писать SQL-шаблоны с переменными и подставлять значения
  • Handlebars.js — расширение Mustache для JavaScript с более мощными возможностями (хелперы и частичные шаблоны)
  • Pug (ранее Jade) — шаблонизатор для Node.js с минималистичным синтаксисом, упрощает написание HTML
  • EJS (Embedded JavaScript Templates) — простой в использовании шаблонизатор для Node.js, позволяет встраивать JavaScript-код в HTML
  • Twig — шаблонизатор для PHP с читаемым синтаксисом, используется во фреймворке Symfony
  • Smarty — один из старейших шаблонизаторов для PHP, известный своей системой кеширования и расширяемостью
  • Velocity — шаблонизатор для Java от Apache, для отделения логики от представления в серверных приложениях
  • Thymeleaf — современный серверный шаблонизатор для Java для создания веб-приложений

Материалы

  1. Что такое и зачем нужны шаблонизаторы HTML

  2. Текстовые шаблонизаторы и их реализация

  3. Три неочевидных примера использования шаблонизаторов в backend-е

  4. Шаблонизаторы HTML: что это и стоит ли их использовать в разработке

  5. Тотальная шаблонизация

  6. 15 шаблонизаторов для фронтенд-разработки

  7. ТОП-10 шаблонизаторов для фронтенд-разработки

  8. 6 лучших шаблонизаторов на PHP

  9. 5 популярных PHP-шаблонизаторов

  10. ТОП-10 шаблонизаторов HTML для web-разработки

  11. FreeMarker шаблоны

  12. FreeMarker

  13. Работаем с шаблонизатором PUG

  14. Что такое шаблонизатор Twig и зачем он нужен?

  15. Thymeleaf для новичков: оживляем HTML-шаблоны

  16. Учебник Thymeleaf

  17. Как использовать шаблонизаторы Pug, Handlebars, EJS

  18. HotMilk — библиотека для удобной организации шаблонов Mustache

Видео

  1. Mustache - шаблонизатор без логики
  2. Express JavaScript - Что такое шаблонизаторы
  3. Что такое шаблонизатор Twig и зачем он нужен
  4. Верстка. Уроки
  5. Шаблонизация