模板引擎

使用 Jet 模板引擎 渲染动态内容。使用模板继承和包含构建 HTML 页面、电子邮件和文档。

关于模板集配置,请参见 模板引擎

加载

local templates = require("templates")

获取模板集

通过注册表 ID 获取模板集以开始渲染:

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

-- 使用模板集...

set:release()
参数 类型 描述
id string 模板集注册表 ID

返回值: Set, error

渲染模板

使用数据按名称渲染模板:

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
参数 类型 描述
name string 模板集中的模板名称
data table 传递给模板的变量(可选)

返回值: string, error

Set 方法

方法 返回值 描述
render(name, data?) string, error 使用数据渲染模板
release() boolean 将模板集释放回池

Jet 语法参考

Jet 使用 {{ }} 表示表达式和控制结构,{* *} 表示注释。

变量

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

条件

{{ if order.shipped }}
    <p>Shipped!</p>
{{ else if order.processing }}
    <p>Processing...</p>
{{ else }}
    <p>Received.</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() }}My Page{{ end }}
{{ block body() }}<p>Content</p>{{ end }}

包含

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

错误

条件 类型 可重试
ID 为空 errors.INVALID
模板名称为空 errors.INVALID
权限被拒绝 errors.PERMISSION_DENIED
模板未找到 errors.NOT_FOUND
渲染错误 errors.INTERNAL
模板集已释放 errors.INTERNAL

参见 错误处理 了解如何处理错误。