Go
golang
Hugo

hugo で {{ .Summary }} がエラーになったときの対処

More than 3 years have passed since last update.


:eyes: TL;DR



  • {{ if .IsPage }}... {{ else }} ... {{ end }} で分岐させる


:exclamation: 問題

hugo に移行する途中、メタデータにブログ記事の要約を載せようと、 .Summary を使おうとしたら以下のエラーに遭遇した。

<!-- .Summary を表示させる (内部的には html/template) -->

<meta property="og:description" content="{{ .Summary }}">

ここで hugo コマンドを実行すると、以下のエラーが出てしまう。

ERROR: 2015/08/02 template: partials/header.html:15:54: executing "partials/header.html" at <.Summary>: Summary is not a field of struct type *hugolib.Node in partials/header.html

0

構造体 *hugolib.Node の中に Summary なんてフィールドは無いぞと怒られる。

※ Node は ListHomepage, Taxonomy Terms (カテゴリ・タグ) に適応されるタイプで、Page はそれ以外、みたいな雑な理解をしている。


:white_check_mark: 解決

Node から .Summary へアクセス出来ないので、.IsPage.IsNode で条件分岐を入れる。それぞれ Page か Node かを真偽値で返してくれる hugo の変数である。

{{ if .IsPage }}{{ .Summary }}{{ else }}{{ .Site.Params.description }}{{ end }}

<meta property="og:description" content="{{ if .IsPage }}{{ .Summary }}{{ else }}{{ .Site.Params.description }}{{ end }}">

本当は {{ with .Summary }} を使いたいところだけど、先述の通り Node からアクセスするとエラーになるので、上記のような形に落ち着いた。


参考リンク