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

Шаблоны

Рендеринг динамического контента с помощью шаблонизатора Jet. Подходит для генерации HTML-страниц, писем и документов с поддержкой наследования и включений.

Настройка наборов шаблонов описана в разделе Шаблонизатор.

local templates = require("templates")

Для работы с шаблонами сначала нужно получить набор по его идентификатору в реестре:

local set, err = templates.get("app.views:emails")
if err then
return nil, err
end
-- Работа с набором...
set:release()
ПараметрТипОписание
idstringИдентификатор набора в реестре

Возвращает: 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
ПараметрТипОписание
namestringИмя шаблона в наборе
datatableДанные для шаблона (необязательно)

Возвращает: string, error

МетодВозвращаетОписание
render(name, data?)string, errorРендеринг шаблона
release()booleanОсвобождение набора

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нет

Подробнее см. Обработка ошибок.