2019-10-21 04:22:28 -04:00
---
2023-07-29 05:15:54 -04:00
title: Section page templates
linkTitle: Section templates
2019-10-21 04:22:28 -04:00
description: Templates used for section pages are **lists** and therefore have all the variables and methods available to list pages.
categories: [templates]
keywords: [lists,sections,templates]
menu:
docs:
2023-05-22 10:43:12 -04:00
parent: templates
2023-07-29 05:15:54 -04:00
weight: 80
weight: 80
2019-10-21 04:22:28 -04:00
toc: true
2023-12-04 09:14:18 -05:00
aliases: [/templates/sections/]
2019-10-21 04:22:28 -04:00
---
2023-07-29 05:15:54 -04:00
## Add content and front matter to section templates
2019-10-21 04:22:28 -04:00
To effectively leverage section page templates, you should first understand Hugo's [content organization ](/content-management/organization/ ) and, specifically, the purpose of `_index.md` for adding content and front matter to section and other list pages.
2023-07-29 05:15:54 -04:00
## Section template lookup order
2019-10-21 04:22:28 -04:00
See [Template Lookup ](/templates/lookup-order/ ).
2023-07-29 05:15:54 -04:00
## Page kinds
2019-10-21 04:22:28 -04:00
Every `Page` in Hugo has a `.Kind` attribute.
2023-12-04 09:14:18 -05:00
{{% include "content-management/_common/page-kinds.md" %}}
2019-10-21 04:22:28 -04:00
2023-07-29 05:15:54 -04:00
## `.Site.GetPage` with sections
2019-10-21 04:22:28 -04:00
2023-10-20 03:42:39 -04:00
`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.
2019-10-21 04:22:28 -04:00
The [`.GetPage` function][getpage] 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" }}`
2023-07-29 05:15:54 -04:00
## Example: creating a default section template
2019-10-21 04:22:28 -04:00
2023-12-04 09:14:18 -05:00
{{< code file = layouts/_default/section.html > }}
2019-10-21 04:22:28 -04:00
{{ define "main" }}
< main >
2023-08-07 04:35:12 -04:00
{{ .Content }}
< ul class = "contents" >
{{ range .Paginator.Pages }}
< li > {{ .Title }}
< div >
{{ partial "summary.html" . }}
< / div >
< / li >
{{ end }}
< / ul >
{{ partial "pagination.html" . }}
2019-10-21 04:22:28 -04:00
< / main >
{{ end }}
{{< / code > }}
2023-07-29 05:15:54 -04:00
### Example: using `.Site.GetPage`
2019-10-21 04:22:28 -04:00
The `.Site.GetPage` example that follows assumes the following project directory structure:
2022-11-17 10:14:29 -05:00
```txt
2019-10-21 04:22:28 -04:00
.
└── content
├── blog
2023-12-04 09:14:18 -05:00
│ ├── _index.md # "title: My Hugo Blog" in the front matter
│ ├── post-1.md
│ ├── post-2.md
│ └── post-3.md
2019-10-21 04:22:28 -04:00
└── 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:
2022-11-17 10:14:29 -05:00
```go-html-template
2019-10-21 04:22:28 -04:00
< 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:
2022-11-17 10:14:29 -05:00
```html
2019-10-21 04:22:28 -04:00
< 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:
2022-11-17 10:14:29 -05:00
```go-html-template
2019-10-21 04:22:28 -04:00
< h1 > {{ with .Site.GetPage "section" "events" }}{{ .Title }}{{ end }}< / h1 >
```
Which then returns the following:
2022-11-17 10:14:29 -05:00
```html
2019-10-21 04:22:28 -04:00
< h1 > Events< / h1 >
```
[contentorg]: /content-management/organization/
2023-12-04 09:14:18 -05:00
[getpage]: /methods/page/getpage
2019-10-21 04:22:28 -04:00
[lists]: /templates/lists/
[lookup]: /templates/lookup-order/
2023-10-20 03:42:39 -04:00
[`where`]: /functions/collections/where
2019-10-21 04:22:28 -04:00
[sections]: /content-management/sections/