cfe89ecbc Set all *.png files under static/images to mode 0644 d847ccd8b More spelling error fixes bf1405d92 Correction: .Pages on homepage is same as .Site.RegularPages 7efa41ff5 Merge commit 'd137efe0222269e09b427325176f0044558e3cc5' d137efe02 Squashed 'themes/gohugoioTheme/' changes from f31a3dc8..66249819 50df8bfb8 Replace .Data.Pages with .Pages 85d3712d0 Mention the newScratch template func 1c234db1b Release 0.44 a51cb3e36 Merge branch 'temp44' ec424a5e2 releaser: Prepare repository for 0.45-DEV 425e85574 releaser: Add release notes to /docs for release of 0.44 e6f9c65a2 releaser: Bump versions for release of 0.44 45548a5c9 Arch Linux: Partial upgrades are unsupported c0430f8f9 Update MenuEntry properties documentation 79109b685 Refresh the documentation on staticDir config parameter 80ed4592b Remove duplicate links; also sort them alphabetically f00a4e232 HTTPS links to third-party sites 2f6f682ba Fixed a typo 4be105202 add openbsd howto install 39808f50a Fix typo b55c0f3a0 Fix URL to hugotest 2fb157237 Release Hugo 0.43 e8af6a970 Merge branch 'temp43' 563dd4173 Adjust release notes 50aed2e52 releaser: Prepare repository for 0.44-DEV 363b363ff releaser: Add release notes to /docs for release of 0.43 93bfbef62 releaser: Bump versions for release of 0.43 893a27d33 Fix typos fe5908257 Celebrate: a few typo and grammar fixes bb20442df Merge commit '98293eaa1570b5aff4452021c8b6d6c8560b3f06' ef3d63936 Add a newScratch template func bf100a3cd Merge branch 'release-0.42.2' f1133c544 releaser: Prepare repository for 0.43-DEV 2ce058057 releaser: Add release notes to /docs for release of 0.42.2 6073927c6 releaser: Bump versions for release of 0.42.2 3bafddd52 releaser: Prepare repository for 0.43-DEV 8b9f805bd releaser: Add release notes to /docs for release of 0.42.1 efb6638ba releaser: Bump versions for release of 0.42.1 1e74ffbe0 releaser: Prepare repository for 0.43-DEV 2d2d0f8ab releaser: Add release notes to /docs for release of 0.42 17f685813 releaser: Bump versions for release of 0.42 67ef1a0e1 docs: Update theme documentation d74874e1e docs: Remove some files now moved 771d50cf3 Merge commit 'b239595af5a9fc1fc9a1ccc666c3ab06ccc32f04' f9b5fd2d2 tplimpl: Remove speakerdeck shortcode 523206579 tpl/strings: strings.RuneCount b389efc88 tpl: Add strings.Repeat a41ad0254 Add a BlackFriday option for rel="noreferrer" on external links a6e279362 Add a BlackFriday option for rel="nofollow" on external links 7e2c9846e releaser: Prepare repository for 0.42-DEV b4f81c38a releaser: Add release notes to /docs for release of 0.41 55667b3a1 releaser: Bump versions for release of 0.41 afceb02d3 docs: Document the GDPR Privacy Config 8b8289027 Merge commit 'd2b1030060d3c91d5f9ffa3456418da16bd74f1d' be04a8886 Merge branch 'release-0.40.3' 33ca0b8da releaser: Prepare repository for 0.41-DEV 8c9a5a850 releaser: Add release notes to /docs for release of 0.40.3 85845a4fd releaser: Bump versions for release of 0.40.3 9af79e531 Merge commit '83bef6955e014d40c0f00db9cebe09113154e999' c4200dd0e Fix typo 8f8323336 releaser: Prepare repository for 0.41-DEV 9fab87505 releaser: Add release notes to /docs for release of 0.40.2 83648c666 releaser: Bump versions for release of 0.40.2 e6434d104 releaser: Prepare repository for 0.41-DEV 9389b2973 releaser: Add release notes to /docs for release of 0.40.1 32979e28a releaser: Bump versions for release of 0.40.1 196174a76 releaser: Prepare repository for 0.41-DEV 490a997bb releaser: Add release notes to /docs for release of 0.40 018aa6471 releaser: Bump versions for release of 0.40 92221934c Merge commit 'a215abf70e018f4bf40d6c09d8bd148d8684b33d' 0a58ef56e Merge commit 'd2ec1a06df8ab6b17ad05cb008d5701b40327d47' 312ab58c6 Improve .Get docs e43e8cee3 .Get function: fix syntax signature bb16150bc releaser: Prepare repository for 0.40-DEV 8cc80fed9 releaser: Add release notes to /docs for release of 0.39 f7aa0d1c5 releaser: Bump versions for release of 0.39 42e48706a Merge commit '047c4188dfc854f658d16f1e4a9501f9c97a31c7' 76acab68b releaser: Prepare repository for 0.39-DEV d270600b0 releaser: Add release notes to /docs for release of 0.38.2 97be36992 releaser: Bump versions for release of 0.38.2 cd29b8b79 releaser: Prepare repository for 0.39-DEV 9983a4bdf releaser: Add release notes to /docs for release of 0.38.1 7774afd01 releaser: Bump versions for release of 0.38.1 b89157f20 releaser: Prepare repository for 0.39-DEV af4d0bf62 releaser: Add release notes to /docs for release of 0.38 ca98e7d4f releaser: Bump versions for release of 0.38 8b773833a Merge commit 'ed8bf081fdbf336e026517b7e1b123c039014ab5' 24202bb71 docs: Generate docshelper data 43d15975d Add .Site.IsServer 6f99d3d65 Merge commit '0a23baa6a90901f772c234107c4f12c16c76f4aa' 17487ccdd hugolib: Add Reset method to delete key from Scratch ccbf7a05c docs: Add docs for lang.Merge 5ad46d78e Merge commit '3886fc1fef6ac19d58b9ba1bb642d0c6c9a54031' ac403c280 docs: Add docs on the new front matter configuration 6066c60e6 Merge commit 'c0290655825e7bb36e13fb39f89d85b392cf1adc' ee605c7ae releaser: Prepare repository for 0.38-DEV 31a4de966 releaser: Add release notes to /docs for release of 0.37.1 9dd3dafe1 releaser: Bump versions for release of 0.37.1 141750aec releaser: Prepare repository for 0.38-DEV c9bb39bc3 releaser: Add release notes to /docs for release of 0.37 c7009f064 releaser: Bump versions for release of 0.37 9f727d916 Merge commit '900b5f6cfe5a377ef369d26cd700201be4cf6b06' 87fd97853 Merge commit '374d184e6747678364fd61f5faf328ec9205eb6b' 244deafc2 Fix typos in development contribution doc 608c80f72 Merge branch 'release-0.36.1' 0f8ffbd5c releaser: Prepare repository for 0.37-DEV 5028ee849 releaser: Add release notes to /docs for release of 0.36.1 9ccc7cb11 releaser: Bump versions for release of 0.36.1 3db31be07 Merge commit '9cc9bab46288d8d5f9fda7009c5f746258cec1b4' 9468246c5 Add "target" and "rel" parameters to figure shortcode 6d7fa89f9 releaser: Prepare repository for 0.37-DEV 1aec7ad81 releaser: Add release notes to /docs for release of 0.36 b522da389 releaser: Bump versions for release of 0.36 bb78bea13 docs: Add documentation for smart cropping etc. 930f16cae Merge commit 'c305e44f5f081e4436195923a4593e396f07cd49' 0e4c80ab9 releaser: Prepare repository for 0.36-DEV e0d4c6bcd releaser: Add release notes to /docs for release of 0.35 f4ac67eb3 releaser: Bump versions for release of 0.35 229a50b1f docs: Regenerate CLI docs 72958eb9c Merge commit '337d0c5f516ee085205e8abefdb7f87e6d33ca05' d998ca4c0 command: Remove undraft command 34a0052ef docs: Re-generate CLI docs fa04ff331 releaser: Prepare repository for 0.35-DEV 55e595720 releaser: Add release notes to /docs for release of 0.34 bf4d0e8fb releaser: Bump versions for release of 0.34 07673370e releaser: Prepare repository for 0.34-DEV 921ea8920 releaser: Add release notes to /docs for release of 0.33 3307f61bd releaser: Bump versions for release of 0.33 792a4410d Merge commit '3cf4300097610bb8b5bd0686d96d1df5db641895' 6d8a9f657 releaser: Prepare repository for 0.33-DEV e3afccf6f releaser: Add release notes to /docs for release of 0.32.4 7f29cb196 releaser: Bump versions for release of 0.32.4 baa364436 releaser: Prepare repository for 0.33-DEV 60c775166 releaser: Add release notes to /docs for release of 0.32.3 9cbab1803 releaser: Bump versions for release of 0.32.3 51823efee releaser: Prepare repository for 0.33-DEV 71e03684c releaser: Add release notes to /docs for release of 0.32.2 e18bf56fb releaser: Bump versions for release of 0.32.2 54aa93927 Merge commit 'eb738cd35cca1ffc68c5ed688dbe2a19108e8761' 5e8123994 releaser: Prepare repository for 0.33-DEV a55b78124 releaser: Add release notes to /docs for release of 0.32.1 7de53ff41 releaser: Bump versions for release of 0.32.1 e6e58785d releaser: Prepare repository for 0.33-DEV 58cf5009d releaser: Add release notes to /docs for release of 0.32 031719821 Merge commit 'f3cd083961f36dc96d05e98aaf67f650102bc757' b9183604b Add Pandoc support, refactor external helpers 3f9b9474c releaser: Prepare repository for 0.32-DEV 11e4ce514 releaser: Add release notes to /docs for release of 0.31.1 aebb1504b releaser: Bump versions for release of 0.31.1 d70b54d4a releaser: Prepare repository for 0.32-DEV cdc10468e releaser: Add release notes to /docs for release of 0.31 38bd41cab releaser: Bump versions for release of 0.31 1c581a11d Merge commit '30c0d485eaff6d70df1be0353911ddca485d52bf' b88e46d02 Merge commit '05e42bc643f1840ed2ad9c2eff82a269d1381683' a45ab174e Handle Taxonomy permalinks 9f27354f6 Add support for height argument to figure shortcode acc8e49c1 releaser: Prepare repository for 0.31-DEV 977266b19 releaser: Add release notes to /docs for release of 0.30.2 31b672844 releaser: Bump versions for release of 0.30.2 b8f6b72a8 Merge commit '325009c3fd4ac90021897b7e3e025c14e70ce162' c6e3dae71 releaser: Prepare repository for 0.31-DEV 2a3c7c7d9 releaser: Add release notes to /docs for release of 0.30.1 4c014117a releaser: Bump versions for release of 0.30.1 1da61da06 releaser: Prepare repository for 0.31-DEV 24864a46b releaser: Add release notes to /docs for release of 0.30 3011aa44a releaser: Bump versions for release of 0.30 bcbf3237b Merge commit 'ecf5e081b5540e69f4af330233f39a07baf53846' ab68b99ed Merge commit 'dae5a7c61cceeb0de59f2d755f63e453f71dd9b2' 0ae435725 tpl: Add errorf template function ac3fb3808 Change SummaryLength to be configurable (#3924) 3c0e4fa70 tpl: Add os.fileExists template function 9290f3983 Merge commit '9d68f695e782c6a83c77aff13317c7a22c694c98' 394e8b3f6 tpl: Add float template function c0c48c2ea releaser: Prepare repository for 0.30-DEV 0806d910b releaser: Add release notes to /docs for release of 0.29 0d1101836 releaser: Bump versions for release of 0.29 5d92b552b releaser: Prepare repository for 0.29-DEV 1ef521182 releaser: Add release notes to /docs for release of 0.28 c5441cff1 releaser: Bump versions for release of 0.28 46c2786f1 Merge commit '61c27b58b353c73772aae572c7d822fdfdf7791b' 6fed4008f Merge commit '30694a133a88d5f76a51d0372646e10cbeca7691' 595752e2f Merge commit '7a89dce53bfbd67a17442a8f9be8fa895fc4f9b1' af14cae0c Merge commit 'ba45da9d03056447e4873de13d4e0f8d658a769b' d0bb30963 releaser: Prepare repository for 0.28-DEV 469bf26aa releaser: Add release notes to /docs for release of 0.27.1 06ea00c12 releaser: Bump versions for release of 0.27.1 0668af58e releaser: Prepare repository for 0.28-DEV 4ce00c84d releaser: Add release notes to /docs for release of 0.27 68f318d0b releaser: Bump versions for release of 0.27 509ad6cc0 docs: Merge commit '1b4319be62ba071f79e90ef32dbe92eb893429f7' c625ae1ce docs: Document Related Content ecd5c24f5 docs: Merge commit '7d63a23b0c68d9cd7c7c09c2755619237bc03485' b97b84f9d Update docs versiona and README 2238f7a4a Merge commit 'ec4e6f9df2ab9ffdc62a3f59675369096e0d3f77' as 'docs' git-subtree-dir: docs git-subtree-split: cfe89ecbc2288a7270c23dbcc179733c8d978c4c
17 KiB
title | linktitle | description | godocref | date | publishdate | lastmod | categories | keywords | menu | weight | sections_weight | draft | aliases | toc | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Introduction to Hugo Templating | Introduction | Hugo uses Go's `html/template` and `text/template` libraries as the basis for the templating. | https://golang.org/pkg/html/template/ | 2017-02-01 | 2017-02-01 | 2017-02-25 |
|
|
|
10 | 10 | false |
|
true |
{{% note %}} The following is only a primer on Go templates. For an in-depth look into Go templates, check the official Go docs. {{% /note %}}
Go templates provide an extremely simple template language that adheres to the belief that only the most basic of logic belongs in the template or view layer.
{{< youtube gnJbPO-GFIw >}}
Basic Syntax
Go templates are HTML files with the addition of variables and functions. Go template variables and functions are accessible within {{ }}
.
Access a Predefined Variable
{{ foo }}
Parameters for functions are separated using spaces. The following example calls the add
function with inputs of 1
and 2
:
{{ add 1 2 }}
Methods and Fields are Accessed via dot Notation
Accessing the Page Parameter bar
defined in a piece of content's front matter.
{{ .Params.bar }}
Parentheses Can be Used to Group Items Together
{{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
Variables
Each Go template gets a data object. In Hugo, each template is passed a Page
. See variables for more information.
This is how you access a Page
variable from a template:
<title>{{ .Title }}</title>
Values can also be stored in custom variables and referenced later:
{{ $address := "123 Main St."}}
{{ $address }}
{{% warning %}}
Variables defined inside if
conditionals and similar are not visible on the outside. See https://github.com/golang/go/issues/10608.
Hugo has created a workaround for this issue in Scratch.
{{% /warning %}}
Functions
Go templates only ship with a few basic functions but also provide a mechanism for applications to extend the original set.
Hugo template functions provide additional functionality specific to building websites. Functions are called by using their name followed by the required parameters separated by spaces. Template functions cannot be added without recompiling Hugo.
Example 1: Adding Numbers
{{ add 1 2 }}
=> 3
Example 2: Comparing Numbers
{{ lt 1 2 }}
=> true (i.e., since 1 is less than 2)
Note that both examples make use of Go template's math functions.
{{% note "Additional Boolean Operators" %}} There are more boolean operators than those listed in the Hugo docs in the Go template documentation. {{% /note %}}
Includes
When including another template, you will need to pass it the data that it would need to access.
{{% note %}} To pass along the current context, please remember to include a trailing dot. {{% /note %}}
The templates location will always be starting at the layouts/
directory
within Hugo.
Partial
The partial
function is used to include partial templates using
the syntax {{ partial "<PATH>/<PARTIAL>.<EXTENSION>" . }}
.
Example:
{{ partial "header.html" . }}
Template
The template
function was used to include partial templates in much older
Hugo versions. Now it is still useful for calling internal
templates:
{{ template "_internal/opengraph.html" . }}
Logic
Go templates provide the most basic iteration and conditional logic.
Iteration
Just like in Go, the Go templates make heavy use of range
to iterate over
a map, array, or slice. The following are different examples of how to use
range.
Example 1: Using Context
{{ range array }}
{{ . }}
{{ end }}
Example 2: Declaring Value => Variable name
{{range $element := array}}
{{ $element }}
{{ end }}
Example 3: Declaring Key-Value Variable Name
{{range $index, $element := array}}
{{ $index }}
{{ $element }}
{{ end }}
Conditionals
if
, else
, with
, or
, and and
provide the framework for handling conditional logic in Go Templates. Like range
, each statement is closed with an {{end}}
.
Go Templates treat the following values as false:
- false
- 0
- any zero-length array, slice, map, or string
Example 1: if
{{ if isset .Params "title" }}<h4>{{ index .Params "title" }}</h4>{{ end }}
Example 2: if
… else
{{ if isset .Params "alt" }}
{{ index .Params "alt" }}
{{else}}
{{ index .Params "caption" }}
{{ end }}
Example 3: and
& or
{{ if and (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
Example 4: with
An alternative way of writing "if
" and then referencing the same value
is to use "with
" instead. with
rebinds the context .
within its scope
and skips the block if the variable is absent.
The first example above could be simplified as:
{{ with .Params.title }}<h4>{{ . }}</h4>{{ end }}
Example 5: if
… else if
{{ if isset .Params "alt" }}
{{ index .Params "alt" }}
{{ else if isset .Params "caption" }}
{{ index .Params "caption" }}
{{ end }}
Pipes
One of the most powerful components of Go templates is the ability to stack actions one after another. This is done by using pipes. Borrowed from Unix pipes, the concept is simple: each pipeline's output becomes the input of the following pipe.
Because of the very simple syntax of Go templates, the pipe is essential to being able to chain together function calls. One limitation of the pipes is that they can only work with a single value and that value becomes the last parameter of the next pipeline.
A few simple examples should help convey how to use the pipe.
Example 1: shuffle
The following two examples are functionally the same:
{{ shuffle (seq 1 5) }}
{{ (seq 1 5) | shuffle }}
Example 2: index
The following accesses the page parameter called "disqus_url" and escapes the HTML. This example also uses the index
function, which is built into Go templates:
{{ index .Params "disqus_url" | html }}
Example 3: or
with isset
{{ if or (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr") }}
Stuff Here
{{ end }}
Could be rewritten as
{{ if isset .Params "caption" | or isset .Params "title" | or isset .Params "attr" }}
Stuff Here
{{ end }}
Example 4: Internet Explorer Conditional Comments
By default, Go Templates remove HTML comments from output. This has the unfortunate side effect of removing Internet Explorer conditional comments. As a workaround, use something like this:
{{ "<!--[if lt IE 9]>" | safeHTML }}
<script src="html5shiv.js"></script>
{{ "<![endif]-->" | safeHTML }}
Alternatively, you can use the backtick (`
) to quote the IE conditional comments, avoiding the tedious task of escaping every double quotes ("
) inside, as demonstrated in the examples in the Go text/template documentation:
{{ `<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]-->` | safeHTML }}
Context (aka "the dot")
The most easily overlooked concept to understand about Go templates is that {{ . }}
always refers to the current context. In the top level of your template, this will be the data set made available to it. Inside of an iteration, however, it will have the value of the current item in the loop; i.e., {{ . }}
will no longer refer to the data available to the entire page. If you need to access page-level data (e.g., page params set in front matter) from within the loop, you will likely want to do one of the following:
1. Define a Variable Independent of Context
The following shows how to define a variable independent of the context.
{{< code file="tags-range-with-page-variable.html" >}} {{ $title := .Site.Title }}
-
{{ range .Params.tags }}
- {{ . }} - {{ $title }} {{ end }}
{{% note %}}
Notice how once we have entered the loop (i.e. range
), the value of {{ . }}
has changed. We have defined a variable outside of the loop ({{$title}}
) that we've assigned a value so that we have access to the value from within the loop as well.
{{% /note %}}
2. Use $.
to Access the Global Context
$
has special significance in your templates. $
is set to the starting value of .
("the dot") by default. This is a documented feature of Go text/template. This means you have access to the global context from anywhere. Here is an equivalent example of the preceding code block but now using $
to grab .Site.Title
from the global context:
{{< code file="range-through-tags-w-global.html" >}}
-
{{ range .Params.tags }}
- {{ . }} - {{ $.Site.Title }} {{ end }}
{{% warning "Don't Redefine the Dot" %}}
The built-in magic of $
would cease to work if someone were to mischievously redefine the special character; e.g. {{ $ := .Site }}
. Don't do it. You may, of course, recover from this mischief by using {{ $ := . }}
in a global context to reset $
to its default value.
{{% /warning %}}
Whitespace
Go 1.6 includes the ability to trim the whitespace from either side of a Go tag by including a hyphen (-
) and space immediately beside the corresponding {{
or }}
delimiter.
For instance, the following Go template will include the newlines and horizontal tab in its HTML output:
<div>
{{ .Title }}
</div>
Which will output:
<div>
Hello, World!
</div>
Leveraging the -
in the following example will remove the extra white space surrounding the .Title
variable and remove the newline:
<div>
{{- .Title -}}
</div>
Which then outputs:
<div>Hello, World!</div>
Go considers the following characters whitespace:
- space
- horizontal tab
- carriage return
- newline
Comments
In order to keep your templates organized and share information throughout your team, you may want to add comments to your templates. There are two ways to do that with Hugo.
Go templates comments
Go templates support {{/*
and */}}
to open and close a comment block. Nothing within that block will be rendered.
For example:
Bonsoir, {{/* {{ add 0 + 2 }} */}}Eliott.
Will render Bonsoir, Eliott.
, and not care about the syntax error (add 0 + 2
) in the comment block.
HTML comments
If you need to produce HTML comments from your templates, take a look at the Internet Explorer conditional comments example. If you need variables to construct such HTML comments, just pipe printf
to safeHTML
. For example:
{{ printf "<!-- Our website is named: %s -->" .Site.Title | safeHTML }}
HTML comments containing Go templates
HTML comments are by default stripped, but their content is still evaluated. That means that although the HTML comment will never render any content to the final HTML pages, code contained within the comment may fail the build process.
{{% note %}} Do not try to comment out Go template code using HTML comments. {{% /note %}}
<!-- {{ $author := "Emma Goldman" }} was a great woman. -->
{{ $author }}
The templating engine will strip the content within the HTML comment, but will first evaluate any Go template code if present within. So the above example will render Emma Goldman
, as the $author
variable got evaluated in the HTML comment. But the build would have failed if that code in the HTML comment had an error.
Hugo Parameters
Hugo provides the option of passing values to your template layer through your site configuration (i.e. for site-wide values) or through the metadata of each specific piece of content (i.e. the front matter). You can define any values of any type and use them however you want in your templates, as long as the values are supported by the front matter format specified via metaDataFormat
in your configuration file.
Use Content (Page
) Parameters
You can provide variables to be used by templates in individual content's front matter.
An example of this is used in the Hugo docs. Most of the pages benefit from having the table of contents provided, but sometimes the table of contents doesn't make a lot of sense. We've defined a notoc
variable in our front matter that will prevent a table of contents from rendering when specifically set to true
.
Here is the example front matter:
---
title: Roadmap
lastmod: 2017-03-05
date: 2013-11-18
notoc: true
---
Here is an example of corresponding code that could be used inside a toc.html
partial template:
{{< code file="layouts/partials/toc.html" download="toc.html" >}} {{ if not .Params.notoc }}
{{end}} {{< /code >}}We want the default behavior to be for pages to include a TOC unless otherwise specified. This template checks to make sure that the notoc:
field in this page's front matter is not true
.
Use Site Configuration Parameters
You can arbitrarily define as many site-level parameters as you want in your site's configuration file. These parameters are globally available in your templates.
For instance, you might declare the following:
{{< code-toggle file="config" >}} params: copyrighthtml: "Copyright © 2017 John Doe. All Rights Reserved." twitteruser: "spf13" sidebarrecentlimit: 5 {{< /code >}}
Within a footer layout, you might then declare a <footer>
that is only rendered if the copyrighthtml
parameter is provided. If it is provided, you will then need to declare the string is safe to use via the safeHTML
function so that the HTML entity is not escaped again. This would let you easily update just your top-level config file each January 1st, instead of hunting through your templates.
{{if .Site.Params.copyrighthtml}}<footer>
<div class="text-center">{{.Site.Params.CopyrightHTML | safeHTML}}</div>
</footer>{{end}}
An alternative way of writing the "if
" and then referencing the same value is to use with
instead. with
rebinds the context (.
) within its scope and skips the block if the variable is absent:
{{< code file="layouts/partials/twitter.html" >}} {{with .Site.Params.twitteruser}}
{{end}} {{< /code >}}Finally, you can pull "magic constants" out of your layouts as well. The following uses the first
function, as well as the .RelPermalink
page variable and the .Site.Pages
site variable.
<nav>
<h1>Recent Posts</h1>
<ul>
{{- range first .Site.Params.SidebarRecentLimit .Site.Pages -}}
<li><a href="{{.RelPermalink}}">{{.Title}}</a></li>
{{- end -}}
</ul>
</nav>
Example: Show Only Upcoming Events
Go allows you to do more than what's shown here. Using Hugo's where
function and Go built-ins, we can list only the items from content/events/
whose date (set in a content file's front matter) is in the future. The following is an example partial template:
{{< code file="layouts/partials/upcoming-events.html" download="upcoming-events.html" >}}
Upcoming Events
-
{{ range where .Pages.ByDate "Section" "events" }}
{{ if ge .Date.Unix .Now.Unix }}
- {{ .Type | title }} — {{ .Title }} on {{ .Date.Format "2 January at 3:04pm" }} at {{ .Params.place }} {{ end }} {{ end }}