HUGO
Menu
GitHub 86778 stars Mastodon

MainSections

Returns a slice of the main section names as defined in your project configuration, falling back to the top-level section with the most pages.

Syntax

SITE.MainSections

Returns

[]string

Project configuration:

mainSections:
- books
- films
mainSections = ['books', 'films']
{
   "mainSections": [
      "books",
      "films"
   ]
}

Template:

{{ .Site.MainSections }} → [books films]

If mainSections is not defined in your project configuration, this method returns a slice with one element—the top-level section with the most pages.

With this content structure, the “films” section has the most pages:

content/
├── books/
│   ├── book-1.md
│   └── book-2.md
├── films/
│   ├── film-1.md
│   ├── film-2.md
│   └── film-3.md
└── _index.md

Template:

{{ .Site.MainSections }} → [films]

When creating a theme, instead of hardcoding section names when listing the most relevant pages on the front page, instruct users to set mainSections in their project configuration.

Then your home template can do something like this:

layouts/home.html
{{ range where .Site.RegularPages "Section" "in" .Site.MainSections }}
  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ end }}