Шаблоны
Рендеринг динамического контента с помощью шаблонизатора Jet. Подходит для генерации HTML-страниц, писем и документов с поддержкой наследования и включений.
Настройка наборов шаблонов описана в разделе Шаблонизатор.
Подключение
local templates = require("templates")
Получение набора шаблонов
Для работы с шаблонами сначала нужно получить набор по его идентификатору в реестре:
local set, err = templates.get("app.views:emails")
if err then
return nil, err
end
-- Работа с набором...
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, err
end
set:release()
return html
| Параметр | Тип | Описание |
|---|---|---|
name |
string | Имя шаблона в наборе |
data |
table | Данные для шаблона (необязательно) |
Возвращает: string, error
Методы набора
| Метод | Возвращает | Описание |
|---|---|---|
render(name, data?) |
string, error |
Рендеринг шаблона |
release() |
boolean |
Освобождение набора |
Синтаксис 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 |
нет |
Подробнее см. Обработка ошибок.