Hugoテンプレートの基本構文
HugoはGoのhtml/templateとtext/templateライブラリをテンプレート基盤として使用する。
これはGoテンプレートの入門である。詳細は公式のGoドキュメントを確認するとよい。
Goテンプレートは、テンプレートまたはビュー層には基本的なロジックだけを反映するという考えに基づいたシンプルなテンプレート言語である。
Basic Syntax
Goテンプレートは変数と関数で構成されるHTMLである。変数や関数を使うには{{ }}を使用する。
{{ .Title }}
{{ $address }}
.Titleは事前定義された変数である。$addressはユーザー定義変数である。
関数の引数は空白で区切る。
{{ FUNCTION ARG1 ARG2 }}
{{ add 1 2 }}
メソッドやフィールドにはドット(.)でアクセスする。
{{ .Params.bar }}
括弧で項目をグループ化でき、1行の構文を複数行に分けることもできる。
変数
各Goテンプレートはデータオブジェクトを受け取る。Hugoでは各テンプレートにPageが渡される。Pageがデフォルトスコープであるため、.Titleのように.接頭辞でアクセスできる。
<title>{{ .Title }}</title>
ユーザー定義変数には$接頭辞を付ける。
{{ $address := "123 main st." }}
{{ $address }}
関数
Hugoテンプレート関数はWebサイトに追加機能を提供する。関数は関数名で呼び出し、必要な引数は空白で区切る。
{{ add 1 2 }}
{{ lt 1 2 }}
Includes
別のテンプレートを含めるときは、そこで参照するデータを渡す。現在のコンテキストを渡すには末尾にドット(.)を付ける。
{{ partial "header.html" . }}
{{ template "_internal/opengraph.html" . }}
Logic
Goテンプレートは基本的な繰り返しと条件分岐を提供する。rangeはmap、array、sliceを反復する。
{{ range $array }}
{{ . }}
{{ else }}
<!-- $arrayが空の場合だけ評価される -->
{{ end }}
if、else、with、or、and、notは条件ロジックを扱う。Goテンプレートではfalse、0、長さ0の配列、slice、map、文字列はfalseとして扱われる。