基本文法など
はじめに
Hugo バージョン:v0.74.3
Hugoのテンプレートは、Go言語の html/template
とか text/template
というライブラリを使用する。
詳しい使い方については、上記ライブラリのドキュメントを参照。
基本の文法
HTMLファイルで作ったテンプレート中に、 {{ }}
で囲んだところがテンプレート用の構文を書くところになる。
定義済みの変数やプロパティは、以下のようにして記述する。基本的に、変数の内容がそのままHTMLへ出力される。
{{ .Title }}
{{ $address }}
コメントを書く
{{/* コメント */}}
周辺の余白をトリムする
{{- -}}
のように、かっこの内側に-
を付けると、前後の余白を無くしてくれる。
例えば、以下のようにテンプレートを書いた場合:
<div>
{{- .Title -}}
</div>
HTMLの出力結果は以下のようになる。タイトルの前後に入れていた改行と空白がなくなる。
<div>PageTitle!</div>
変数
テンプレートファイルでは、そのとき処理しているページの情報を、Page
変数として参照できる。
ページ変数へは、.
でアクセス可能で、.Title
であれば、ページのタイトルを取得できる。
ページ変数の定義については、Page Variables | Hugo 参照。
また、テンプレートファイル内で変数を定義することも可能。変数名は$
から始める。
{{ $arg1 := "aiueo" }}
{{ $arg1 }}
(v0.47以前) ちなみに、変数の値をif文の中で変更して、if文の後でその値を参照することはできないらしい。
v0.48以降であれば、=
を使って条件分岐で変数の値を変えることができるらしい。
{{ $var := "Hugo Page" }}
{{ if .IsHome }}
{{ $var = "Hugo Home" }}
{{ end }}
Var is {{ $var }}
Page変数
よく使いそうなプロパティ:
.Title
- ページのタイトル(front matterに書いたもの).Content
- ページの内容(front matterの後に書かれたもの).Date
,.LastMod
,.ExpiryDate
,PublishDate
- front matterに書いた日付。.Draft
- 下書きかどうか(front matter).Next
- 次のページ。{{with .Next}}{{.Permalink}}{{end}}
と書けば次ページへのリンクを貼れる。.NextInSection
- 同一セクション内での次ページ。
テンプレートファイルの再利用
テンプレートファイルから、別のテンプレートファイルを取り込むことができる。 どこにでも書くような内容は共通のテンプレートファイルにしておいて、他から使用することが可能。
共通テンプレートファイルは layouts/partial
フォルダへ置くこと。
使用する側では、以下のように書く。
{{ partial "header.html" . }}
partial
関数以外にも template
という関数があるが、こちらは古いバージョンから使われてきたものらしい。
現在では、internalテンプレート(Hugo内蔵のテンプレート)を使うときに使う。
internalテンプレートの顔ぶれは、HugoのGitHubリポジトリで参照できる。