Skip to main content

セクションページ テンプレート

セクションページに使用されるテンプレートは リスト であるため、リストページで使用できるすべての変数とメソッドを備えています。

セクション テンプレートにコンテンツとフロントマターを追加する

セクションページ テンプレートを効果的に活用するには、まず Hugo の コンテンツ構成 を理解し、特に、セクションやその他のリストページにコンテンツやフロントマターを追加するための _index.md の目的を理解する必要があります。

セクション テンプレートの検索順序

「テンプレートの検索順序」 を参照してください。

ページの種類

Hugo のすべての Page には、 .Kind 属性があります。

Kind 説明
home ホームページのランディングページ /index.html
page 指定されたページのランディングページ my-post ページ (/posts/my-post/index.html)
section 指定されたセクションのランディングページ posts セクション (/posts/index.html)
taxonomy タクソノミーのランディングページ tags タクソノミー (/tags/index.html)
term あるタクソノミーの用語のランディングページ tags タクソノミーの用語 awesome (/tags/awesome/index.html)

セクションを含む .Site.GetPage

Kind はテンプレートの中で where 関数 と組み合わせることで、簡単にコンテンツの種類に応じたリストを作成できます。この方法はリストを作成するのに適していますが、セクションのパスを介して、単一のセクションのインデックスページだけを取得したい場合もあります。

.GetPage 関数 は、指定された Kindpath のインデックスページを検索します。

kind (上記の Kind の有効な値の 1 つ) と kind value の 2 つの引数を指定して、.Site.GetPage を呼び出すことができます。

例:

  • {{ .Site.GetPage "section" "posts" }}
  • {{ .Site.GetPage "page" "search" }}

例: デフォルトのセクション テンプレートを作成する

layouts/_default/section.html
{{ define "main" }}
  <main>
      {{ .Content }}
          <ul class="contents">
          {{ range .Paginator.Pages }}
              <li>{{ .Title }}
                  <div>
                    {{ partial "summary.html" . }}
                  </div>
              </li>
          {{ end }}
          </ul>
      {{ partial "pagination.html" . }}
  </main>
{{ end }}

例: .Site.GetPage を使用する

この後の .Site.GetPage の例では、以下のようなプロジェクトのディレクトリ構造を想定しています。

.
└── content
    ├── blog
    │   ├── _index.md # "title: My Hugo Blog" in the front matter
    │   ├── post-1.md
    │   ├── post-2.md
    │   └── post-3.md
    └── events #Note there is no _index.md file in "events"
        ├── event-1.md
        └── event-2.md

.Site.GetPage_index.md ページが見つからなければ、 nil を返します。したがって、content/blog/_index.md が存在しない場合、テンプレートはセクション名を出力します。

<h1>{{ with .Site.GetPage "section" "blog" }}{{ .Title }}{{ end }}</h1>

blogcontent/blog/_index.md にフロントマターのあるセクション インデックスページを持っているので、上記のコードは以下の結果を返します。

<h1>My Hugo Blog</h1>

しかし、同じコードを events セクションで試すと、Hugo はセクションのタイトルをデフォルトにします。コンテンツとフロントマターを取得するための content/events/_index.md が存在しないためです。

<h1>{{ with .Site.GetPage "section" "events" }}{{ .Title }}{{ end }}</h1>

上記のコードは、以下を返します。

<h1>Events</h1>