Шаблоны
Шаблоны
Заголовок раздела «Шаблоны»Рендеринг динамического контента с помощью шаблонизатора Jet. Подходит для генерации HTML-страниц, писем и документов с поддержкой наследования и включений.
Настройка наборов шаблонов описана в разделе Шаблонизатор.
Подключение
Заголовок раздела «Подключение»local templates = require("templates")Получение набора шаблонов
Заголовок раздела «Получение набора шаблонов»Для работы с шаблонами сначала нужно получить набор по его идентификатору в реестре:
local set, err = templates.get("app.views:emails")if err then return nil, errend
-- Работа с набором...
set:release()| Параметр | Тип | Описание |
|---|---|---|
id | string | Идентификатор набора в реестре |
Возвращает: Set, error
Рендеринг
Заголовок раздела «Рендеринг»Для рендеринга укажите имя шаблона и данные:
local set = templates.get("app.views:emails")
local html, err = set:render("welcome", { user = {name = "Алексей", email = "alex@example.com"}, activation_url = "https://example.com/activate?token=abc"})
if err then set:release() return nil, errend
set:release()return html| Параметр | Тип | Описание |
|---|---|---|
name | string | Имя шаблона в наборе |
data | table | Данные для шаблона (необязательно) |
Возвращает: string, error
Методы набора
Заголовок раздела «Методы набора»| Метод | Возвращает | Описание |
|---|---|---|
render(name, data?) | string, error | Рендеринг шаблона |
release() | boolean | Освобождение набора |
Синтаксис Jet
Заголовок раздела «Синтаксис Jet»Jet использует {{ }} для выражений и управляющих конструкций, {* *} для комментариев.
Переменные
Заголовок раздела «Переменные»{{ user.name }}{{ user.email }}{{ items[0].price }}Условия
Заголовок раздела «Условия»{{ if order.shipped }} <p>Заказ отправлен!</p>{{ else if order.processing }} <p>Заказ обрабатывается...</p>{{ else }} <p>Заказ принят.</p>{{ end }}{{ range items }} <li>{{ .name }} — {{ .price }} ₽</li>{{ end }}
{{ range i, item := items }} <p>{{ i }}. {{ item.name }}</p>{{ end }}Наследование
Заголовок раздела «Наследование»{* Базовый шаблон: layout.jet *}<html><head><title>{{ yield title() }}</title></head><body>{{ yield body() }}</body></html>
{* Дочерний шаблон: page.jet *}{{ extends "layout" }}{{ block title() }}Моя страница{{ end }}{{ block body() }}<p>Содержимое</p>{{ end }}Включения
Заголовок раздела «Включения»{{ include "partials/header" }}<main>Основной контент</main>{{ include "partials/footer" }}| Ситуация | Тип | Повтор |
|---|---|---|
| Пустой идентификатор | errors.INVALID | нет |
| Пустое имя шаблона | errors.INVALID | нет |
| Нет доступа | errors.PERMISSION_DENIED | нет |
| Шаблон не найден | errors.NOT_FOUND | нет |
| Ошибка рендеринга | errors.INTERNAL | нет |
| Набор уже освобождён | errors.INTERNAL | нет |
Подробнее см. Обработка ошибок.