アルパカのメモ

基本文法など

はじめに

Hugo バージョン:v0.74.3

Hugoのテンプレートは、Go言語の html/template とか text/template というライブラリを使用する。 詳しい使い方については、上記ライブラリのドキュメントを参照。

基本の文法

HTMLファイルで作ったテンプレート中に、 {{ }} で囲んだところがテンプレート用の構文を書くところになる。

定義済みの変数やプロパティは、以下のようにして記述する。基本的に、変数の内容がそのままHTMLへ出力される。

{{ .Title }}
{{ $address }}

コメントを書く

{{/* コメント */}}

周辺の余白をトリムする

{{- -}} のように、かっこの内側に-を付けると、前後の余白を無くしてくれる。

例えば、以下のようにテンプレートを書いた場合:

<div>
  {{- .Title -}}
</div>

HTMLの出力結果は以下のようになる。タイトルの前後に入れていた改行と空白がなくなる。

<div>PageTitle!</div>

変数

テンプレートファイルでは、そのとき処理しているページの情報を、Page変数として参照できる。 ページ変数へは、.でアクセス可能で、.Titleであれば、ページのタイトルを取得できる。 ページ変数の定義については、Page Variables | Hugo 参照。

また、テンプレートファイル内で変数を定義することも可能。変数名は$から始める。

{{ $arg1 := "aiueo" }}
{{ $arg1 }}

(v0.47以前) ちなみに、変数の値をif文の中で変更して、if文の後でその値を参照することはできないらしい。 v0.48以降であれば、=を使って条件分岐で変数の値を変えることができるらしい。

{{ $var := "Hugo Page" }}
{{ if .IsHome }}
    {{ $var = "Hugo Home" }}
{{ end }}
Var is {{ $var }}

Page変数

参考:Page Variables | Hugo

よく使いそうなプロパティ:

  • .Title - ページのタイトル(front matterに書いたもの)
  • .Content - ページの内容(front matterの後に書かれたもの)
  • .Date, .LastMod, .ExpiryDate, PublishDate - front matterに書いた日付。
  • .Draft - 下書きかどうか(front matter)
  • .Next - 次のページ。{{with .Next}}{{.Permalink}}{{end}}と書けば次ページへのリンクを貼れる。
  • .NextInSection - 同一セクション内での次ページ。

テンプレートファイルの再利用

テンプレートファイルから、別のテンプレートファイルを取り込むことができる。 どこにでも書くような内容は共通のテンプレートファイルにしておいて、他から使用することが可能。

共通テンプレートファイルは layouts/partial フォルダへ置くこと。

使用する側では、以下のように書く。

{{ partial "header.html" . }}

partial 関数以外にも template という関数があるが、こちらは古いバージョンから使われてきたものらしい。 現在では、internalテンプレート(Hugo内蔵のテンプレート)を使うときに使う。

internalテンプレートの顔ぶれは、HugoのGitHubリポジトリで参照できる。