Template Engine

O módulo templates renderiza templates Jet a partir de conjuntos configurados. Os templates podem usar herança e includes. Esta página é uma referência de API com exemplos isolados de renderização, não um deployment de templates independente. Os IDs do registry e as fontes dos templates já devem estar configurados, e a entrada executável deve habilitar templates e ter a permissão template.get para o conjunto solicitado.

Para configurar conjuntos de templates, veja Template Engine.

Carregamento

local templates = require("templates")

templates.get

Adquire um conjunto de templates pelo ID do registry:

local set, err = templates.get("app.views:emails")
if err then
    return nil, err
end

-- Use the set...

return set:release()
Parâmetro Tipo Descrição
id string ID do conjunto de templates no registry

Retorna: Set, error

set:render

Renderiza um template por nome com os dados fornecidos:

local set, get_err = templates.get("app.views:emails")
if get_err then
    return nil, get_err
end

local html, err = set:render("welcome", {
    user = {name = "Alice", email = "alice@example.com"},
    activation_url = "https://example.invalid/activate"
})

set:release()
if err then
    return nil, err
end

return html

O chamador é responsável por cada conjunto adquirido até chamar release(). Libere-o depois da última renderização, inclusive em caminhos de erro verificados; chamadas repetidas de release() são seguras. A renderização não torna os valores fornecidos pela aplicação seguros para todos os contextos de saída. Não registre segredos nem URLs de uso único e aplique o escaping ou a sanitização exigidos no local em que a string renderizada será consumida.

Parâmetro Tipo Descrição
name string Nome do template dentro do set
data table Variáveis passadas ao template (opcional)

Retorna: string, error

Métodos do Set

O handle do conjunto oferece estes métodos:

Método Retorna Descrição
render(name, data?) string, error Renderizar template com dados
release() boolean Liberar o conjunto de volta ao pool

Referência da Sintaxe Jet

Jet usa {{ }} para expressões e estruturas de controle e {* *} para comentários.

Variáveis

{{ user.name }}
{{ user.email }}
{{ items[0].price }}

Condicionais

{{ if order.shipped }}
    <p>Shipped!</p>
{{ else if order.processing }}
    <p>Processing...</p>
{{ else }}
    <p>Received.</p>
{{ end }}

Loops

{{ range items }}
    <li>{{ .name }} - ${{ .price }}</li>
{{ end }}

{{ range i, item := items }}
    <p>{{ i }}. {{ item.name }}</p>
{{ end }}

Herança

{* Parent: layout.jet *}
<html>
<head><title>{{ yield title() }}</title></head>
<body>{{ yield body() }}</body>
</html>

{* Child: page.jet *}
{{ extends "layout" }}
{{ block title() }}My Page{{ end }}
{{ block body() }}<p>Content</p>{{ end }}

Includes

{{ include "partials/header" }}
<main>Content</main>
{{ include "partials/footer" }}

Erros

Condição Tipo Retentável
ID vazio errors.INVALID não
Nome de template vazio errors.INVALID não
Permissão negada errors.PERMISSION_DENIED não
Conjunto de templates ausente, indisponível ou com tipo de recurso incorreto errors.INTERNAL não
Template não encontrado errors.NOT_FOUND não
Erro de renderização errors.INTERNAL não
Tentativa de renderização após liberar o conjunto errors.INTERNAL não

Veja Tratamento de Erros para trabalhar com erros.