Hugo におけるサイト内相互参照
Hugo ではサイト内の相互参照(リンク)を表現するために組み込み shortcode である ref
や relref
を使うのだが Hugo 0.45 から ref
/relref
の仕様が変わったので紹介する。
例えば参照したい記事を content/blog/entry.md
とする。
他の記事からこの記事を参照したい場合, Hugo 0.45 より前のバージョンでは
{{< ref "blog/entry.md" >}}
または
{{< relref "blog/entry.md" >}}
のように作業環境の content
フォルダ以下の相対パスを指定すればよかった。
これにより ref
コマンドなら http(s)://site.name/blog/entry/
に, relref
コマンドなら /blog/entry/
に展開されていた。
Hugo 0.45 からは ビルド後のディレクトリ構成で考える。 たとえば
{{< ref "/blog/entry.md" >}}
あるいは
{{< relref "entry.md" >}}
といった感じ(サイトのルート・ディレクトリからの絶対パスを指定する場合 blog/...
ではなく /blog/...
となる点に注目)。
したがって Hugo 0.45 より前の古い表記では warning が発生するので注意が必要である。
また relref
コマンドを使う際に絶対パスを指定した場合も warning になる。
なお,このルールはテンプレートにも適用される。 たとえば
{{ with .Site.GetPage "/blog/entry.md" }}{{ .Title }}{{ end }}
などとすれば任意の記事の情報を取得できる。