- About Hugo
- Getting Started
- Hugo Modules
-
Content Management
- Content Management Overview
- Organization
- Page Bundles
- Content Formats
- Front Matter
- Build Options
- Page Resources
- Image Processing
- Shortcodes
- Related Content
- Sections
- Content Types
- Archetypes
- Taxonomies
- Summaries
- Links and Cross References
- URL Management
- Menus
- Static Files
- Table of Contents
- Comments
- Multilingual and i18n
- Syntax Highlighting
-
Templates
- Templates Overview
- Introduction
- Template Lookup Order
- Custom Output Formats
- Base Templates and Blocks
- List Page Templates
- Homepage Template
- Section Templates
- Taxonomy Templates
- Single Page Templates
- Content View Templates
- Data Templates
- Partial Templates
- Shortcode Templates
- Local File Templates
- 404 Page
- Menu Templates
- Pagination
- RSS Templates
- Sitemap Template
- Robots.txt
- Internal Templates
- Alternative Templating
- Template Debugging
-
Functions
- Functions Quick Reference
- .AddDate
- .Format
- .Get
- .GetPage
- .HasMenuCurrent
- .IsMenuCurrent
- .Param
- .Render
- .RenderString
- .Scratch
- .Unix
- absLangURL
- absURL
- after
- anchorize
- append
- apply
- base64
- chomp
- complement
- cond
- countrunes
- countwords
- dateFormat
- default
- delimit
- dict
- echoParam
- emojify
- eq
- errorf and warnf
- fileExists
- findRE
- first
- float
- ge
- getenv
- group
- gt
- hasPrefix
- highlight
- hmac
- htmlEscape
- htmlUnescape
- hugo
- humanize
- i18n
- Image Functions
- in
- index
- int
- intersect
- isset
- jsonify
- lang.Merge
- lang.NumFmt
- last
- le
- len
- lower
- lt
- markdownify
- Math
- md5
- merge
- ne
- now
- os.Stat
- partialCached
- path.Base
- path.Dir
- path.Ext
- path.Join
- path.Split
- plainify
- pluralize
- printf
- println
- querify
- range
- readDir
- readFile
- ref
- reflect.IsMap
- reflect.IsSlice
- relLangURL
- relref
- relURL
- replace
- replaceRE
- safeCSS
- safeHTML
- safeHTMLAttr
- safeJS
- safeURL
- seq
- sha
- shuffle
- singularize
- site
- slice
- slicestr
- sort
- split
- string
- strings.Count
- strings.HasSuffix
- strings.Repeat
- strings.RuneCount
- strings.TrimLeft
- strings.TrimPrefix
- strings.TrimRight
- strings.TrimSuffix
- substr
- symdiff
- templates.Exists
- time
- title
- transform.Unmarshal
- trim
- truncate
- union
- uniq
- upper
- urlize
- urls.Parse
- where
- with
- Variables
- Hugo Pipes
- CLI
- Troubleshooting
- Tools
- Hosting & Deployment
- Contribute
- Maintenance
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
- .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.
- .Dir
- the path of the folder containing this content file. The path is relative to the
content
folder. - .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.
- .Hugo
- see Hugo Variables .
- .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
, ortaxonomyTerm
. 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.
- .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
. - .RSSLink (deprecated)
- link to the page’s RSS feed. This is deprecated. You should instead do something like this:
{{ with .OutputFormats.Get "RSS" }}{{ .RelPermalink }}{{ end }}
. - .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
). - .UniqueID (deprecated)
- the MD5-checksum of the content file’s path. This variable is deprecated and will be removed, use
.File.UniqueID
instead. - .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 term (
/tags/
) and taxonomy (/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.
This feature was added in Hugo version 0.68.0
- 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