Hugo でホームページの Page オブジェクトを取得する

Hugo テンプレートの中で、ホームページを表す Page オブジェクトを取得するには次のようにします。

{{ $home := .Site.Home }}
{{ printf "%#v" $home }}

公式ドキュメントの .Site 変数のページには書いてないのですが、上記のように簡単にホームページの Page オブジェクトを取得できるみたいです。 2 行目では、取得した Page オブジェクトの内容を出力して確認しています。

GetPage 関数を使用して、Kind パラメータに "home" を指定するというのもありです。

{{ $home := .Site.GetPage "home" }}
{{ printf "%v" (eq $home .Site.Home) }}  {{/* true になるはず */}}

このような取得方法を知るまでは、次のような感じでものすごく面倒な書き方してました。。。

{{ $home := index (where .Site.Pages "URL" "==" "/") 0 }}

まず、where 関数を使い、全ページ (.Site.Pages) 中で URL が / であるものの Page オブジェクトの配列を取得しています。 実際にはホームページは 1 つだけなのですが、wherePage オブジェクトの配列を返すので、index 関数を使って 1 番目の要素だけを取り出しています。 なんて非効率的な(^^;