TL;DR
-
{{ if .IsPage }}... {{ else }} ... {{ end }}
で分岐させる
問題
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 は List や Homepage, Taxonomy Terms (カテゴリ・タグ) に適応されるタイプで、Page はそれ以外、みたいな雑な理解をしている。
解決
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 からアクセスするとエラーになるので、上記のような形に落ち着いた。