Page Variables
The following is a list of page-level variables. Many of these will be defined in the front matter, derived from file location, or extracted from the content itself.
Page Variables
- .AlternativeOutputFormats
- contains all alternative formats for a given page; this variable is especially useful
link rel
list in your site’s<head>
. (See Output Formats.) - .Aliases
- aliases of this page
- .BundleType
- the bundle type:
leaf
,branch
, or an empty string if the page is not a bundle. - .Content
- the content itself, defined below the front matter.
- .Data
- the data specific to this type of page.
- .Date
- the date associated with the page;
.Date
pulls from thedate
field in a content’s front matter. See also.ExpiryDate
,.PublishDate
, and.Lastmod
. - .Description
- the description for the page.
- .Draft
- a boolean,
true
if the content is marked as a draft in the front matter. - .ExpiryDate
- the date on which the content is scheduled to expire;
.ExpiryDate
pulls from theexpirydate
field in a content’s front matter. See also.PublishDate
,.Date
, and.Lastmod
. - .File
- filesystem-related data for this content file. See also File Variables.
- .FuzzyWordCount
- the approximate number of words in the content.
- .IsHome
true
in the context of the homepage.- .IsNode
- always
false
for regular content pages. - .IsPage
- always
true
for regular content pages. - .IsSection
true
if.Kind
issection
.- .IsTranslated
true
if there are translations to display.- .Keywords
- the meta keywords for the content.
- .Kind
- the page’s kind. Possible return values are
page
,home
,section
,taxonomy
, orterm
. Note that there are alsoRSS
,sitemap
,robotsTXT
, and404
kinds, but these are only available during the rendering of each of these respective page’s kind and therefore not available in any of thePages
collections. - .Language
- a language object that points to the language’s definition in the site
config
..Language.Lang
gives you the language code. - .Lastmod
- the date the content was last modified.
.Lastmod
pulls from thelastmod
field in a content’s front matter.
- If
lastmod
is not set, and.GitInfo
feature is disabled, the front matterdate
field will be used. - If
lastmod
is not set, and.GitInfo
feature is enabled,.GitInfo.AuthorDate
will be used instead.
See also .ExpiryDate
, .Date
, .PublishDate
, and .GitInfo
.
- .LinkTitle
- access when creating links to the content. If set, Hugo will use the
linktitle
from the front matter beforetitle
. - .Next
- Points up to the next regular page (sorted by Hugo’s default sort). Example:
{{with .Next}}{{.Permalink}}{{end}}
. Calling.Next
from the first page returnsnil
. - .NextInSection
- Points up to the next regular page below the same top level section (e.g. in
/blog
)). Pages are sorted by Hugo’s default sort. Example:{{with .NextInSection}}{{.Permalink}}{{end}}
. Calling.NextInSection
from the first page returnsnil
. - .OutputFormats
- contains all formats, including the current format, for a given page. Can be combined the with
.Get
function to grab a specific format. (See Output Formats.) - .Pages
- a collection of associated pages. This value will be
nil
within the context of regular content pages. See.Pages
. - .Permalink
- the Permanent link for this page; see Permalinks
- .Plain
- the Page content stripped of HTML tags and presented as a string. You may need to pipe the result through the
htmlUnescape
function when rendering this value with the HTML output format. - .PlainWords
- the slice of strings that results from splitting .Plain into words, as defined in Go’s strings.Fields.
- .Prev
- Points down to the previous regular page (sorted by Hugo’s default sort). Example:
{{if .Prev}}{{.Prev.Permalink}}{{end}}
. Calling.Prev
from the last page returnsnil
. - .PrevInSection
- Points down to the previous regular page below the same top level section (e.g.
/blog
). Pages are sorted by Hugo’s default sort. Example:{{if .PrevInSection}}{{.PrevInSection.Permalink}}{{end}}
. Calling.PrevInSection
from the last page returnsnil
. - .PublishDate
- the date on which the content was or will be published;
.Publishdate
pulls from thepublishdate
field in a content’s front matter. See also.ExpiryDate
,.Date
, and.Lastmod
. - .RawContent
- raw markdown content without the front matter. Useful with remarkjs.com
- .ReadingTime
- the estimated time, in minutes, it takes to read the content.
- .Resources
- resources such as images and CSS that are associated with this page
- .Ref
- returns the permalink for a given reference (e.g.,
.Ref "sample.md"
)..Ref
does not handle in-page fragments correctly. See Cross References. - .RelPermalink
- the relative permanent link for this page.
- .RelRef
- returns the relative permalink for a given reference (e.g.,
RelRef "sample.md"
)..RelRef
does not handle in-page fragments correctly. See Cross References. - .Site
- see Site Variables.
- .Sites
- returns all sites (languages). A typical use case would be to link back to the main language:
<a href="{{ .Sites.First.Home.RelPermalink }}">...</a>
. - .Sites.First
- returns the site for the first language. If this is not a multilingual setup, it will return itself.
- .Summary
- a generated summary of the content for easily showing a snippet in a summary view. The breakpoint can be set manually by inserting <!--more--> at the appropriate place in the content page, or the summary can be written independent of the page text. See Content Summaries for more details.
- .TableOfContents
- the rendered table of contents for the page.
- .Title
- the title for this page.
- .Translations
- a list of translated versions of the current page. See Multilingual Mode for more information.
- .TranslationKey
- the key used to map language translations of the current page. See Multilingual Mode for more information.
- .Truncated
- a boolean,
true
if the.Summary
is truncated. Useful for showing a “Read more…” link only when necessary. See Summaries for more information. - .Type
- the content type of the content (e.g.,
posts
). - .Weight
- assigned weight (in the front matter) to this content, used in sorting.
- .WordCount
- the number of words in the content.
Section Variables and Methods
Also see Sections.
- .CurrentSection
- The page’s current section. The value can be the page itself if it is a section or the homepage.
- .FirstSection
- The page’s first section below root, e.g.
/docs
,/blog
etc. - .InSection $anotherPage
- Whether the given page is in the current section.
- .IsAncestor $anotherPage
- Whether the current page is an ancestor of the given page.
- .IsDescendant $anotherPage
- Whether the current page is a descendant of the given page.
- .Parent
- A section’s parent section or a page’s section.
- .Section
- The section this content belongs to. Note: For nested sections, this is the first path element in the directory, for example,
/blog/funny/mypost/ => blog
. - .Sections
- The sections below this content.
The .Pages
Variable
.Pages
is an alias to .Data.Pages
. It is conventional to use the
aliased form .Pages
.
.Pages
compared to .Site.Pages
- A regular page is a “post” page or a “content” page.
- A leaf bundle is a regular page.
- A list page can list regular pages and other list pages. Some
examples are: homepage, section pages, taxonomy (
/tags/
) and term (/tags/foo/
) pages.- A branch bundle is a list page.
.Site.Pages
- Collection of all pages of the site: regular pages, sections, taxonomies, etc. – Superset of everything!
.Site.RegularPages
- Collection of only regular pages.
The above .Site. ..
page collections can be accessed from any scope in
the templates.
Below variables return a collection of pages only from the scope of the current list page:
.Pages
- Collection of regular pages and only first-level section pages under the current list page.
.RegularPages
- Collection of only regular pages under the
current list page. This excludes regular pages in nested sections/list pages (those are subdirectories with an
_index.md
file. .RegularPagesRecursive
- Collection of all regular pages under a list page. This includes regular pages in nested sections/list pages.
- Note
- From the scope of regular pages,
.Pages
and.RegularPages
return an empty slice.
Page-level Params
Any other value defined in the front matter in a content file, including taxonomies, will be made available as part of the .Params
variable.
---
title: My First Post
date: 2017-02-20T15:26:23-06:00
categories: [one]
tags: [two,three,four]
With the above front matter, the tags
and categories
taxonomies are accessible via the following:
.Params.tags
.Params.categories
The .Params
variable is particularly useful for the introduction of user-defined front matter fields in content files. For example, a Hugo website on book reviews could have the following front matter in /content/review/book01.md
:
---
...
affiliatelink: "http://www.my-book-link.here"
recommendedby: "My Mother"
...
---
These fields would then be accessible to the /themes/yourtheme/layouts/review/single.html
template through .Params.affiliatelink
and .Params.recommendedby
, respectively.
Two common situations where this type of front matter field could be introduced is as a value of a certain attribute like href=""
or by itself to be displayed as text to the website’s visitors.
<h3><a href={{ printf "%s" $.Params.affiliatelink }}>Buy this book</a></h3>
<p>It was recommended by {{ .Params.recommendedby }}.</p>
This template would render as follows, assuming you’ve set uglyURLs
to false
in your site config
:
<h3><a href="http://www.my-book-link.here">Buy this book</a></h3>
<p>It was recommended by my Mother.</p>
The .Param
Method
In Hugo, you can declare params in individual pages and globally for your entire website. A common use case is to have a general value for the site param and a more specific value for some of the pages (i.e., a header image):
{{ $.Param "header_image" }}
The .Param
method provides a way to resolve a single value according to it’s definition in a page parameter (i.e. in the content’s front matter) or a site parameter (i.e., in your config
).
Access Nested Fields in Front Matter
When front matter contains nested fields like the following:
---
author:
given_name: John
family_name: Feminella
display_name: John Feminella
---
.Param
can access these fields by concatenating the field names together with a dot:
{{ $.Param "author.display_name" }}
If your front matter contains a top-level key that is ambiguous with a nested key, as in the following case:
---
favorites.flavor: vanilla
favorites:
flavor: chocolate
---
The top-level key will be preferred. Therefore, the following method, when applied to the previous example, will print vanilla
and not chocolate
:
{{ $.Param "favorites.flavor" }}
=> vanilla