ベーステンプレートとブロック
ベースおよびブロック構造を使用すると、マスターテンプレートの外側のシェル (つまり、ページのクロム) を定義できます。
On this page
block
キーワードを使用すると、ページの 1 つまたは複数のマスターテンプレートの外側のシェルを定義し、必要に応じて部分を埋めたり上書きしたりできます。
ベーステンプレートの検索順序
ベーステンプレートの検索順序は、それが適用されるテンプレート (たとえば、 _default/list.html
) の順序に厳密に従います
詳細と例については、テンプレート検索順序 を参照してください。
ベーステンプレートを定義する
以下では、 _default/baseof.html
でシンプルなベーステンプレート定義しています。デフォルトのテンプレートとして、検索順序の先頭により近い別の *baseof.html
を指定しない限り、このテンプレートがすべてのページのレンダリング元となるシェルとなります。
layouts/_default/baseof.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{ block "title" . }}
<!-- ブロックは、デフォルトのコンテンツを含む場合があります。 -->
{{ .Site.Title }}
{{ end }}</title>
</head>
<body>
<!-- ヘッダーなど、すべてのテンプレートが共有するコード -->
{{ block "main" . }}
<!-- テンプレート間で差異が生じ始めるページの部分 -->
{{ end }}
{{ block "footer" . }}
<!-- より多くの共有コード、おそらくフッターですが、必要に応じてオーバーライドできます -->
{{ end }}
</body>
</html>
ベーステンプレートをオーバーライドする
上記のベーステンプレートから、デフォルトのリストテンプレート
を定義できます。デフォルトのリストテンプレートは上で定義されたすべてのコードを継承し、以下から独自の "main"
ブロックを実装できます。
layouts/_default/list.html
{{ define "main" }}
<h1>Posts</h1>
{{ range .Pages }}
<article>
<h2>{{ .Title }}</h2>
{{ .Content }}
</article>
{{ end }}
{{ end }}
これは、(基本的に空の) “main” ブロックの内容を、リストテンプレートに役立つものに置き換えます。この場合、"title"
ブロックを定義していないので、ベーステンプレートの内容はリスト内で変更されないままです。
を参照してください。
以下は、デフォルトのシングルページ テンプレート
に固有のコードを使用して、ベーステンプレートの "main"
と "title"
ブロックエリアの両方をオーバーライドする方法を示しています。
layouts/_default/single.html
{{ define "title" }}
<!-- これは、baseof.html で設定されたデフォルト値をオーバーライドします。つまり、元の例では "{{ .Site.Title }}" となります。 -->
{{ .Title }} – {{ .Site.Title }}
{{ end }}
{{ define "main" }}
<h1>{{ .Title }}</h1>
{{ .Content }}
{{ end }}