コンテンツにスキップ

テンプレートエンジン

CloudyKit Jetを使用したテンプレートレンダリング。

種別説明
template.set共有設定を持つテンプレートセット
template.jet個別テンプレート

セットは関連するテンプレートを含む名前空間です。セット内のテンプレートは設定を共有し、名前で相互参照できます。

- name: views
kind: template.set

すべての設定は妥当なデフォルト値を持つオプションです:

フィールドデフォルト説明
engine.development_modeboolfalseテンプレートキャッシュを無効化
engine.delimiters.leftstring{{変数開始デリミタ
engine.delimiters.rightstring}}変数終了デリミタ
engine.globalsmap-すべてのテンプレートで利用可能な変数

テンプレートはセットに属し、内部解決用に名前で識別されます。

- name: layout
kind: template.jet
set: app.views:views
source: |
<html>
<body>{{ yield content() }}</body>
</html>
- name: home
kind: template.jet
set: app.views:views
source: |
{{ extends "layout" }}
{{ block content() }}
<h1>Welcome, {{ name }}</h1>
{{ end }}
フィールド必須説明
setreferenceはい親テンプレートセット
sourcestringはいテンプレートコンテンツ

テンプレートはレジストリIDではなく名前で相互参照します。解決はセット内の仮想ファイルシステムのように機能します:

  1. デフォルトでは、レジストリエントリ名(entry.ID.Name)がテンプレート名になります
  2. カスタム命名にはmeta.nameでオーバーライド:
- name: email-welcome-v2
kind: template.jet
set: app.emails:templates
meta:
name: welcome
source: |
{{ include "header" }}
Hello {{ user }}!

このテンプレートはセット内でwelcomeとして登録されるため、他のテンプレートは{{ include "welcome" }}または{{ extends "welcome" }}を使用します。

テンプレートは親テンプレートを拡張し、ブロックをオーバーライドできます:

# 親はyieldポイントを定義
- name: base
kind: template.jet
set: app.views:views
source: |
<html>
<head><title>{{ yield title() }}</title></head>
<body>{{ yield body() }}</body>
</html>
# 子は拡張してブロックを埋める
- name: page
kind: template.jet
set: app.views:views
source: |
{{ extends "base" }}
{{ block title() }}My Page{{ end }}
{{ block body() }}<p>Content here</p>{{ end }}

レンダリング操作についてはテンプレートモジュールを参照してください。