hugo/content/templates/section-templates.md
Bjørn Erik Pedersen 2c0d1ccdcd Squashed 'docs/' changes from b0470688..73f355ce
73f355ce Update theme
83ff50c2 Use example.com in examples
71292134 Add alias news > release-notes
2e15f642 Update theme
8eef09d2 Add Pygments configuration
572b9e75 Clean up the code shortcode use
a1b2fd3b Remove the code fence language codes
1473b1d9 Remove redundant text
b92c2042 Update theme
8f439c28 Edit contributing section in README
8bcf8a19 Add contributing section to README
4c44ee1c Fix broken content file
2bdc7710 Clarify .Data.Pages sorting in lists.md
092271c2 Use infinitive mood for main titles
b9b8abef Update theme to reflect change to home page content
b897b71b Change copy to use sentence case
fd675ee5 Enable RSS feed for sections
060a5e27 Correct movie title in taxonomies.md
6a5ca96a Update displayed site name for Hub
22f4b7a4 Add example of starting up the local server
d9612cb3 Update theme
a8c3988a Update theme
4198189d Update theme
12d6b016 Update theme
2b1c4197 Update theme
b6d90a1e Fix News release titles
cfe751db Add some build info to README

git-subtree-dir: docs
git-subtree-split: 73f355ce0dd88d032062ea70067431ab980cdd8d
2017-07-21 11:00:08 +02:00

3.8 KiB

title linktitle description date publishdate lastmod categories menu weight sections_weight draft aliases toc
Section Page Templates Section Templates Templates used for section pages are **lists** and therefore have all the variables and methods available to list pages. 2017-02-01 2017-02-01 2017-02-01
templates
docs
parent weight
templates 40
40 40 false
/templates/sections/
true

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

The lookup order for section templates is as follows:

  1. /layouts/section/<SECTION>.html
  2. /layouts/<SECTION>/list.html
  3. /layouts/_default/section.html
  4. /layouts/_default/list.html
  5. /themes/<THEME>/layouts/section/<SECTION>.html
  6. /themes/<THEME>/layouts/<SECTION>/list.html
  7. /themes/<THEME>/layouts/_default/section.html
  8. /themes/<THEME>/layouts/_default/list.html

.Site.GetPage with Sections

Every Page in Hugo has a .Kind attribute. 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.

{{% note %}} .GetPage is not currently supported to grab single content files but may be supported in the future. {{% /note %}}

You can call .Site.GetPage with two arguments: kind and kind value.

These are the valid values for 'kind':

  1. home
  2. section
  3. taxonomy
  4. taxonomyTerm

Example: Creating a Default Section Template

{{< code file="layouts/_default/section.html" download="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>