hugo/docs/content/en/templates/section-templates.md
Bjørn Erik Pedersen 5fd1e74903
Merge commit '9b0050e9aabe4be65c78ccf292a348f309d50ccd' as 'docs'
```
git subtree add --prefix=docs/ https://github.com/gohugoio/hugoDocs.git master --squash
```

Closes #11925
2024-01-27 10:48:57 +01:00

3.3 KiB

title linkTitle description categories keywords menu weight toc aliases
Section page templates Section templates Templates used for section pages are **lists** and therefore have all the variables and methods available to list pages.
templates
lists
sections
templates
docs
parent weight
templates 80
80 true
/templates/sections/

Add content and front matter to section templates

To effectively leverage section page templates, you should first understand Hugo's content organization and, specifically, the purpose of _index.md for adding content and front matter to section and other list pages.

Section template lookup order

See Template Lookup.

Page kinds

Every Page in Hugo has a .Kind attribute.

{{% include "content-management/_common/page-kinds.md" %}}

.Site.GetPage with sections

Kind can easily be combined with the where function in your templates to create kind-specific lists of content. This method is ideal for creating lists, but there are times where you may want to fetch just the index page of a single section via the section's path.

The .GetPage function looks up an index page of a given Kind and path.

You can call .Site.GetPage with two arguments: kind (one of the valid values of Kind from above) and kind value.

Examples:

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

Example: creating a default section template

{{< code file=layouts/_default/section.html >}} {{ define "main" }}

{{ .Content }}
    {{ range .Paginator.Pages }}
  • {{ .Title }}
    {{ partial "summary.html" . }}
  • {{ end }}
{{ partial "pagination.html" . }} {{ end }} {{< /code >}}

Example: using .Site.GetPage

The .Site.GetPage example that follows assumes the following project directory structure:

.
└── 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 will return nil if no _index.md page is found. Therefore, if content/blog/_index.md does not exist, the template will output the section name:

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

Since blog has a section index page with front matter at content/blog/_index.md, the above code will return the following result:

<h1>My Hugo Blog</h1>

If we try the same code with the events section, however, Hugo will default to the section title because there is no content/events/_index.md from which to pull content and front matter:

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

Which then returns the following:

<h1>Events</h1>