Skip to main content

ベーステンプレートとブロック

ベースおよびブロック構造を使用すると、マスターテンプレートの外側のシェル (つまり、ページのクロム) を定義できます。

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 }} &ndash; {{ .Site.Title }}
{{ end }}
{{ define "main" }}
  <h1>{{ .Title }}</h1>
  {{ .Content }}
{{ end }}