テンプレート内での条件分岐( if , with)

メモ:  Category:hugo

テンプレートの中で条件分岐を行いたい場合、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 を省略して「ドット(.)」と記述することができます。

bluenote by BBB