コンテンツにスキップ

テンプレートエンジン

Jetテンプレートエンジンを使用して動的コンテンツをレンダリングします。テンプレート継承とインクルードでHTMLページ、メール、ドキュメントを構築できます。

テンプレートセットの設定についてはテンプレートエンジンを参照。

local templates = require("templates")

レンダリングを開始するためにレジストリIDでテンプレートセットを取得します:

local set, err = templates.get("app.views:emails")
if err then
return nil, err
end
-- セットを使用...
set:release()
パラメータ説明
idstringテンプレートセットのレジストリ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
パラメータ説明
namestringセット内のテンプレート名
datatableテンプレートに渡す変数(オプション)

戻り値: string, error

メソッド戻り値説明
render(name, data?)string, errorデータでテンプレートをレンダリング
release()booleanセットをプールに返却

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" }}
条件種別再試行可能
空のIDerrors.INVALIDno
空のテンプレート名errors.INVALIDno
権限拒否errors.PERMISSION_DENIEDno
テンプレートが見つからないerrors.NOT_FOUNDno
レンダリングエラーerrors.INTERNALno
セットは既に解放済みerrors.INTERNALno

エラーの処理についてはエラー処理を参照。