テンプレート内での条件分岐( if , with)
テンプレートの中で条件分岐を行いたい場合、Hugo では if や with を使用することで、分岐処理を行うことができます。
if による条件分岐
テンプレート内で変数や関数を使用するにはときは、中括弧(波括弧)2つで括ります。条件分岐を行うには、次のように ifやelse、end を中括弧で括って記述します。括弧内では、改行してはいけないようです。
{{ if .IsHome }} ... {{ end }}
{{ if .IsHome }} ... {{ else }} ... {{ end }}
{{ if eq .Kind "page" }} ... {{ else if eq .Data.Singular "tag" }} ... {{ end }}
{{ if eq .Kind "page" }} ... {{ else if eq .Data.Singular "tag" }} ... {{ else }} ... {{ end }}
if の条件式において次の値が指定された場合、「偽」と評価されるます。
条件 | 記述例 | メモ |
---|---|---|
false | {{ if false }} | |
0 | {{ if 0 }} | 0 とみなされる数値(0.0 も含む) |
"" | {{ if "" }} | 空文の字列 |
その他、サイズ 0 の配列などが対象となります。
また、2つの値を比較したい場合 eq などの関数を使って評価結果を得ます。
関数 | 記述例 | 意味 |
---|---|---|
eq | eq a b | bがaに等しい(a = b) |
ne | ne a b | bがaに等しくない(a ≠ b) |
gt | gt a b | bよりaが大きい(a > b) |
ge | ge a b | bよりaが大きいか等しい(a >= b) |
lt | lt a b | bよりaが小さい(a < b) |
le | le a b | bよりaが小さいか等しい(a <= b) |
with による分岐
if の代わりに with 使用すると、 if から end のブロック中で「ドット(.)」を使って省略した記述をすることができます。
少しわかりにくいので、 if を使った場合と with を使った場合を比較してみます。
{{ if isset .Params "author" }}{{ .Params.author }}{{ end }}
{{ with .Params.author }}{{ . }}{{ end }}
with を使用すると評価している部分の値が「ドット(.)」にセットされるため、 .Params.author を省略して「ドット(.)」と記述することができます。