テンプレートエンジン

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

セットメソッド

メソッド 戻り値 説明
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 no
空のテンプレート名 errors.INVALID no
権限拒否 errors.PERMISSION_DENIED no
テンプレートが見つからない errors.NOT_FOUND no
レンダリングエラー errors.INTERNAL no
セットは既に解放済み errors.INTERNAL no

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