独学者Fossa

独学していることなど

Hugo Data Templates (5)

Hugo
Hugo

使用環境

Name Version
Hugo v0.121.2-extended

前書き

お恥ずかしいことに、ずっと気づかなかったことがあります。

HugoData Templatesは、PHPで言うところの連想配列の場合、Keyでソートするのがデフォルトらしいです。

コミュニティで検索して、Hugoのリード開発者bepさんの説明で知りました。

試してみましょう。

data/a.ymlの中身は、下記の通りです。

ch: Switzerland
au: Australia
kr: South Korea
gb: United Kingdom

Keyに該当する部分は、chaukrgbです。

本題

データを取り出してみましょう。

<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に該当する部分が、auchgbkrの順になり、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>