使用環境
Name | Version |
---|---|
Hugo | v0.121.2-extended |
前書き
お恥ずかしいことに、ずっと気づかなかったことがあります。
Hugo
のData Templates
は、PHP
で言うところの連想配列の場合、Key
でソートするのがデフォルトらしいです。
コミュニティで検索して、Hugo
のリード開発者bep
さんの説明で知りました。
試してみましょう。
data/a.yml
の中身は、下記の通りです。
ch: Switzerland au: Australia kr: South Korea gb: United Kingdom
Key
に該当する部分は、ch
、au
、kr
、gb
です。
本題
データを取り出してみましょう。
<table> {{- range $key, $value := .Site.Data.a -}} <tr> <td>{{ $key }}</td> <td>{{ $value }}</td> </tr> {{- end -}} </table>
結果は、下記の通りです。
<table> <tr> <td>au</td> <td>Australia</td> </tr> <tr> <td>ch</td> <td>Switzerland</td> </tr> <tr> <td>gb</td> <td>United Kingdom</td> </tr> <tr> <td>kr</td> <td>South Korea</td> </tr> </table>
Key
に該当する部分が、au
、ch
、gb
、kr
の順になり、data/a.yml
の順番とは違います。
ソートしない場合(1)
data/b.yml
は、下記の通りです。
- id: ch name: Switzerland - id: au name: Australia - id: kr name: South Korea - id: gb name: United Kingdom
データを取り出してみましょう。
<table> {{- range .Site.Data.b -}} <tr> <td>{{ .id }}</td> <td>{{ .name }}</td> </tr> {{- end -}} </table>
ソートしない場合(2)
data/c.yml
は、下記の通りです。
- ch: Switzerland - au: Australia - kr: South Korea - gb: United Kingdom
データを取り出してみましょう。
<table> {{- range $row := .Site.Data.c -}} {{- range $key, $value := $row -}} <tr> <td>{{ $key }}</td> <td>{{ $value }}</td> </tr> {{- end -}} {{- end -}} </table>
結果
<table> <tr> <td>ch</td> <td>Switzerland</td> </tr> <tr> <td>au</td> <td>Australia</td> </tr> <tr> <td>kr</td> <td>South Korea</td> </tr> <tr> <td>gb</td> <td>United Kingdom</td> </tr> </table>
後書き
余談に書きましたが、ソートする可能性があるなら、(1)かな?
全くソートしないのなら(2)を選択?
余談
data/b.yml
で、ソートが必要になった場合、下記の通りです。
<table> {{ range sort .Site.Data.b "id" "asc" }} <tr> <td>{{ .id }}</td> <td>{{ .name }}</td> </tr> {{ end }} </table>