テンプレートでディクショナリ(連想配列)を使うには

メモ:  Category:hugo

Hugo のテンプレートでディクショナリ(連想配列)変数を定義するには、 dict 関数を使用します。

ディクショナリの定義

パンくずリストを表示するには」で登場した dict 関数の使い方について見ていきます。

dict 関数のパラメータに、キーと値のペアをスペースで区切って並べていくと、ディクショナリ変数を作成することができます。 次の例では、3つのキーと値を持つディクショナリを定義して、その内容を出力します。

{{ $d := dict "key1" 10 "key2" 20 "key3" 30 }}
{{ printf "%#v" $d }}

出力結果

map[string]interface {}{"key1":10, "key2":20, "key3":30}

ディクショナリの要素を参照するには

ディクショナリ変数の要素を参照するには、定義した変数名とキー名をドットで繋げて指定します。

{{ $d := dict "key1" 10 "key2" 20 "key3" 30 }}
<ul>
  <li>{{ $d.key1 }}</li>
  <li>{{ $d.key2 }}</li>
  <li>{{ $d.key3 }}</li>
</ul>

出力結果

<ul>
  <li>10</li>
  <li>20</li>
  <li>30</li>
</ul>

ドットを使ってキーを指定する方法は、キー名がアルファベット(やアンダースコア)で始まっている場合にしか使用できません。数字で始まるキーを使用したい場合は、index 関数を使用して要素を参照します。

{{ $d := dict "1F" 10 "2F" 20 "3F" 30 }}
<ul>
  <li>{{ index $d "1F" }}</li>
  <li>{{ index $d "2F" }}</li>
  <li>{{ index $d "3F" }}</li>
</ul>

ループで要素を得る

配列ということなので設定された要素を順次取得することもできます。変数内にある要素は、range を使うことで取得することができます。

次の例では、変数内のキーと値を順番に取り出しています。

{{ $d := dict "key1" 10 "key2" 20 "key3" 30 }}
<ul>
  {{ range $key, $val := $d }}
    <li>{{ $key }} = {{ $val }}</li>
  {{ end }}
</ul>

出力結果

<ul>
    <li>key1 = 10</li>
    <li>key2 = 20</li>
    <li>key3 = 30</li>
</ul>

bluenote by BBB