hugo $taxonomy の $key は大文字が小文字化されるので比較に注意
Created: 2022-06-01
Series: シリーズを追加
- 2022-06-01 hugo $taxonomy の $key は大文字が小文字化されるので比較に注意
- 2020-10-20 hugo でシリーズ記事一覧を表示するための Shortcode と設定
何のこと?
ref. https://gohugo.io/variables/taxonomy/#example-usage-of-sitetaxonomies
リンク先 {{ range$ key, $value := $taxonomy }}
における $key
のこと。
何が問題?
以前の記事において以下のような Shortcode を設定した。
{{ $name := .Get "name" }}
<div class="in-article-list">
<p class="in-article-list-p">Series: {{ $name }}</p>
<ul class="page-list">
{{ range $key, $series := site.Taxonomies.series }}
{{ if eq $key $name }}
{{ range $series.Pages }}
<li>
<span class="list-date">{{ .Date.Format "2006/01/02" }}</span>
<br>
<a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
</li>
{{ end }}
{{ end }}
{{ end }}
</ul>
</div>
シリーズ名に大文字を含む場合、 $name
は大文字のままだが、 $key
は小文字に変換される。そのため {{ if eq $key $name }}
は False となってしまう。
改善方法
{{ $name := .Get "name" }}
<div class="in-article-list">
<p class="in-article-list-p">Series: {{ $name }}</p>
<ul class="page-list">
{{ range $key, $series := site.Taxonomies.series }}
{{ $key_urlized := $key | urlize }}
{{ $name_urlized := $name | urlize }}
{{ if eq $key_urlized $name_urlized }}
{{ range $series.Pages }}
<li>
{{ .Date.Format "2006-01-02" }} <a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
</li>
{{ end }}
{{ end }}
{{ end }}
</ul>
</div>
上記のように urlize
を噛ませて変数に代入する。urlize
は文字列を大文字・小文字の区別なく URL エンコードしてくれる。