はじめに
テンプレートは複数定義することができます。どのテンプレートが利用されるかは、以下のような要素によって決定します。全てのパターンを網羅すると量が多くなりすぎるので、よく利用すると思われるパターンに絞って説明します。詳細は、Hugo’s Lookup Orderを参照してください。
要素 | Hugo変数 | 関連するパス | 説明 |
---|---|---|---|
テーマ | .Theme | ディレクトリ名 | テーマ名。設定ファイルで設定。 |
種別 | .Kind | テンプレート名 | ページ種別。home、section、pageなど。 |
レイアウト | .Layout | ディレクトリ名 | ページのフロントマターで指定する。 |
出力フォーマット | .OutputFormats | テンプレート名 | HTML、RSSなど。.OutputFormatsは、複数の要素を保持する変数です。 |
言語 | .Language | テンプレート名 | ページの記述言語。 |
タイプ | .Type | ディレクトリ名 | セクション名。セクション名がない場合は、“page”。フロントマターで指定(変更)可能。 |
セクション | .Section | ディレクトリ名、テンプレート名 | セクション名。 |
テンプレートの選択方法
選択するテンプレートのタイプ
どのタイプのテンプレートが利用されるかは、ページの種類によって変わります。基本的には、以下の3種類のページが存在します(他にも存在しますが、私は使ってないので)。
種類 | ディレクトリ | ファイル名 |
---|---|---|
ホームページ | content 直下 | _index.md |
セクションページ | content 直下以外のディレクトリ | _index.md |
通常ページ | 任意のディレクトリ | _index.md 以外 |
Taxonomyページ | カテゴリ分け用のページ | (_index.md) |
Termページ | Taxonomy内のキー | (_index.md) |
以下に、各ファイルが、どの種類に相当するのかの、一例を示します。
- content/
- _index.md ⇒ ホームページ(content直下の_index.md)
- contact.md ⇒ 通常ページ(_index.md以外のマークダウンファイル)
- blog/
- _index.md ⇒ セクションページ(content直下以外の_index.md)
- 2020-01-01.md ⇒ 通常ページ(_index.md以外のマークダウンファイル)
- 2020-01-02.md ⇒ 通常ページ(_index.md以外のマークダウンファイル)
- hugo/
- _index.md ⇒ セクションページ(content直下以外の_index.md)
- template/
- index.md ⇒ 通常ページ(_index.md以外のマークダウンファイル)
- images/
- template.png
- static/
- images/
- favicon.ico
- js/
- script.js
- images/
各ページ種類により利用する、基本となるテンプレート名は、以下の通りです。ホームページは、セクションページの特殊形態となっています。ホームページのデザインを他のセクションページと分ける必要がない場合は、list.htmlを使うことで、ホームページとセクションページのテンプレートファイルを共有させることもできます。
種類 | baseof.html | index.html | section.html | list.html | single.html |
---|---|---|---|---|---|
ホームページ | ✔ | ✔ | - | ✔ | - |
セクションページ | ✔ | - | ✔ | ✔ | - |
通常ページ | ✔ | - | - | - | ✔ |
上記を見てわかるように、ホームページとセクションとで、同じテンプレートを利用するのであれば、index.htmlとsection.htmlを作成せずに、list.htmlを共有することもできます。ホームページの場合は、.IsHomeという変数が定義されているかどうかで、判断することができます。
ディレクトリ
テンプレートは、以下のlayoutsディレクトリに配置します。
- root/
- layouts/
- themes/
- <テーマ名>/
- layouts/
- <テーマ名>/
ホームページ
Hugoでは、テンプレートを選択する際、ホームページを特別扱いしています。ホームページ専用のテンプレートを作成することができます。
- layouts/index.html
- layouts/home.html
- layouts/list.html
- layouts/_default/index.html
- layouts/_default/home.html
- layouts/_default/list.html
ベーステンプレートは、以下が利用されます。
- layouts/index-baseof.html
- layouts/home-baseof.html
- layouts/list-baseof.html
- layouts/baseof.html
- layouts/_default/index-baseof.html
- layouts/_default/home-baseof.html
- layouts/_default/list-baseof.html
- layouts/_default/baseof.html
セクションページ
セクションページでは、以下のテンプレートが利用されます。タイプ名とレイアウト名は、フロントマターで変更できます。
- layouts/<タイプ名>/<レイアウト名>.html
- layouts/<タイプ名>/<セクション名>.html
- layouts/<タイプ名>/section.html
- layouts/<タイプ名>/list.html
- layouts/<セクション名>/<レイアウト名>.html
- layouts/<セクション名>/<セクション名>.html
- layouts/<セクション名>/section.html
- layouts/<セクション名>/list.html
- layouts/section/<レイアウト名>.html
- layouts/section/<セクション名>.html
- layouts/section/section.html
- layouts/section/list.html
- layouts/_default/<レイアウト名>.html
- layouts/_default/<セクション名>.html
- layouts/_default/section.html
- layouts/_default/list.html
ベーステンプレートは、以下が利用されます。
- layouts/<タイプ名>/<レイアウト名>-baseof.html
- layouts/<タイプ名>/<セクション名>-baseof.html
- layouts/<タイプ名>/section-baseof.html
- layouts/<タイプ名>/baseof.html
- layouts/<セクション名>/<レイアウト名>-baseof.html
- layouts/<セクション名>/<セクション名>-baseof.html
- layouts/<セクション名>/section-baseof.html
- layouts/<セクション名>/baseof.html
- layouts/_default/<レイアウト名>-baseof.html
- layouts/_default/<セクション名>-baseof.html
- layouts/_default/section-baseof.html
- layouts/_default/baseof.html
通常ページ
通常ページでは、以下のテンプレートが利用されます。タイプ名とレイアウト名は、フロントマターで変更できます。タイプ名を設定した場合は、セクション名は利用できないようです。
- layouts/<タイプ名>/<レイアウト名>.html
- layouts/<タイプ名>/single.html
- layouts/<セクション名>/<レイアウト名>.html
- layouts/<セクション名>/single.html
- layouts/_default/<レイアウト名>.html
- layouts/_default/single.html
ベーステンプレートは、以下が利用されます。
- layouts/<タイプ名>/<レイアウト名>-baseof.html
- layouts/<タイプ名>/single-baseof.html
- layouts/<タイプ名>/baseof.html
- layouts/<セクション名>/<レイアウト名>-baseof.html
- layouts/<セクション名>/single-baseof.html
- layouts/<セクション名>/baseof.html
- layouts/_default/<レイアウト名>-baseof.html
- layouts/_default/single-baseof.html
- layouts/_default/baseof.html
Taxonomyページ
Taxonomyページでは、以下のテンプレートが利用されます。
- layouts/<Taxonomy名(複数形)>/<Taxonomy名(単数形)>.terms.html
- layouts/<Taxonomy名(複数形)>/terms.html
- layouts/<Taxonomy名(複数形)>/taxonomy.html
- layouts/<Taxonomy名(複数形)>/list.html
- layouts/<Taxonomy名(単数形)>/<Taxonomy名(単数形)>.terms.html
- layouts/<Taxonomy名(単数形)>/terms.html
- layouts/<Taxonomy名(単数形)>/taxonomy.html
- layouts/<Taxonomy名(単数形)>/list.html
- layouts/taxonomy/<Taxonomy名(単数形)>.terms.html
- layouts/taxonomy/terms.html
- layouts/taxonomy/taxonomy.html
- layouts/taxonomy/list.html
- layouts/_default/<Taxonomy名(単数形)>.terms.html
- layouts/_default/terms.html
- layouts/_default/taxonomy.html
- layouts/_default/list.html
Termページ
Termページでは、以下のテンプレートが利用されます。
- layouts/<Taxonomy名(複数形)>/term.html
- layouts/<Taxonomy名(複数形)>/<Taxonomy名(単数形)>.html
- layouts/<Taxonomy名(複数形)>/taxonomy.html
- layouts/<Taxonomy名(複数形)>/list.html
- layouts/term/<Taxonomy名(単数形)>.html
- layouts/term/taxonomy.html
- layouts/term/list.html
- layouts/taxonomy/term.html
- layouts/taxonomy/<Taxonomy名(単数形)>.html
- layouts/taxonomy/taxonomy.html
- layouts/taxonomy/list.html
- layouts/<Taxonomy名(単数形)>/term.html
- layouts/<Taxonomy名(単数形)>/<Taxonomy名(単数形)>.html
- layouts/<Taxonomy名(単数形)>/taxonomy.html
- layouts/<Taxonomy名(単数形)>/list.html
- layouts/_default/term.html
- layouts/_default/<Taxonomy名(単数形)>.html
- layouts/_default/taxonomy.html
- layouts/_default/list.html
最終更新日
February 7, 2021