Template Engine

Renderize conteudo dinamico usando o Jet template engine. Construa paginas HTML, emails e documentos com heranca de templates e includes.

Para configuração de template sets, veja Template Engine.

Carregamento

local templates = require("templates")

Obtendo Template Sets

Obter um template set pelo ID do registry para comecar a renderizar:

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

-- Usar o set...

set:release()
Parâmetro Tipo Descrição
id string ID do template set no registry

Retorna: Set, error

Renderizando Templates

Renderizar um template pelo nome com dados:

local set = templates.get("app.views:emails")

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

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

set:release()
return html
Parâmetro Tipo Descrição
name string Nome do template dentro do set
data table Variaveis para passar ao template (opcional)

Retorna: string, error

Métodos do Set

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

Referência da Sintaxe Jet

Jet usa {{ }} para expressoes e estruturas de controle, {* *} para comentarios.

Variaveis

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

Condicionais

{{ if order.shipped }}
    <p>Enviado!</p>
{{ else if order.processing }}
    <p>Processando...</p>
{{ else }}
    <p>Recebido.</p>
{{ end }}

Loops

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

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

Heranca

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

{* Child: page.jet *}
{{ extends "layout" }}
{{ block title() }}Minha Pagina{{ end }}
{{ block body() }}<p>Conteudo</p>{{ end }}

Includes

{{ include "partials/header" }}
<main>Conteudo</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
Template não encontrado errors.NOT_FOUND não
Erro de renderização errors.INTERNAL não
Set ja liberado errors.INTERNAL não

Veja Error Handling para trabalhar com erros.