81847981f Add notes for installing "extended" Sass/SCSS version 02da3bb58 Include usage of disqus internal template 9b53380c4 Update sitemap-template.md f3417dd52 Update sitemap-template.md aae33d9a8 Update sitemap-template.md 834edc205 Release 0.45.1 fb93ab905 Merge branch 'temp451' 79f350906 releaser: Prepare repository for 0.46-DEV 25cd2352c releaser: Add release notes to /docs for release of 0.45.1 e60377c71 releaser: Bump versions for release of 0.45.1 873f6dce2 Update features.md ecc116642 Update link for Azure cb88c3185 Added .Site.Home to Site Variiables (#541) 975a88791 Document includePaths 56c4e332f Release Hugo 0.45 c22b25210 Merge branch 'temp45' 0ffad3ada releaser: Prepare repository for 0.46-DEV 08d494cc3 releaser: Add release notes to /docs for release of 0.45 ad546ba45 releaser: Bump versions for release of 0.45 971c46bb2 Fixed "Sratch" to become "Scratch" on line 44 a28255bf3 Clarify the meaning of .Pages vs .Site.Pages 127aeee09 docs: Update ref, relref, GetPage docs 350d674ec resources.Concat doesn't have an alias 1fd1219b0 docs: Document refLinksErrorLevel and refLinksNotFoundURL af2252ff6 Merge commit 'a3535c8486b2ce762b1a8a9c30b03985c3e02cee' a11486805 Merge commit 'b6b37a1f00f808f3c0d2715f65ca2d3091f36495' 1c8896cb1 Fix addkit link to account for i18n 468aef3fc releaser: Prepare repository for 0.45-DEV c6f4b97a2 releaser: Add release notes to /docs for release of 0.44 d3985afb7 releaser: Bump versions for release of 0.44 2c59a330c Adjust release notes 83966769a releaser: Prepare repository for 0.44-DEV e539613f7 releaser: Add release notes to /docs for release of 0.43 2bf648944 releaser: Bump versions for release of 0.43 d9d6e4bf7 Fix typos d6798afda Merge commit '98293eaa1570b5aff4452021c8b6d6c8560b3f06' 37cc52261 Add a newScratch template func 1f7f09613 Merge branch 'release-0.42.2' 857b0b26a releaser: Prepare repository for 0.43-DEV git-subtree-dir: docs git-subtree-split: 81847981f1f2cb1ebc83d42d275a2afb2bb22df1
3.3 KiB
title | description | godocref | date | publishdate | lastmod | keywords | categories | menu | toc | signature | workson | hugoversion | relatedfuncs | deprecated | draft | aliases | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
.Scratch | Acts as a "scratchpad" to allow for writable page- or shortcode-scoped variables. | 2017-02-01 | 2017-02-01 | 2017-02-01 |
|
|
|
false | false |
|
In most cases you can do okay without Scratch
, but due to scoping issues, there are many use cases that aren't solvable in Go Templates without Scratch
's help.
.Scratch
is available as methods on Page
and Shortcode
. Since Hugo 0.43 you can also create a locally scoped Scratch
using the template func newScratch
.
{{% note %}} See this Go issue for the main motivation behind Scratch. {{% /note %}}
{{% note %}}
For a detailed analysis of .Scratch
and in context use cases, see this post.
{{% /note %}}
Get a Scratch
From Hugo 0.43
you can also create a locally scoped Scratch
by calling newScratch
:
$scratch := newScratch
$scratch.Set "greeting" "Hello"
A Scratch
is also added to both Page
and Shortcode
. Scratch
has the following methods:
.Set
Set the given value to a given key
{{ .Scratch.Set "greeting" "Hello" }}
.Get
Get the value of a given key
{{ .Scratch.Set "greeting" "Hello" }}
----
{{ .Scratch.Get "greeting" }} > Hello
.Add
Will add a given value to existing value of the given key.
For single values, Add
accepts values that support Go's +
operator. If the first Add
for a key is an array or slice, the following adds will be appended to that list.
{{ .Scratch.Add "greetings" "Hello" }}
{{ .Scratch.Add "greetings" "Welcome" }}
----
{{ .Scratch.Get "greetings" }} > HelloWelcome
{{ .Scratch.Add "total" 3 }}
{{ .Scratch.Add "total" 7 }}
----
{{ .Scratch.Get "total" }} > 10
{{ .Scratch.Add "greetings" (slice "Hello") }}
{{ .Scratch.Add "greetings" (slice "Welcome" "Cheers") }}
----
{{ .Scratch.Get "greetings" }} > []interface {}{"Hello", "Welcome", "Cheers"}
.SetInMap
Takes a key
, mapKey
and value
and add a map of mapKey
and value
to the given key
.
{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ .Scratch.Get "greetings" }} > map[french:Bonjour english:Hello]
.GetSortedMapValues
Returns array of values from key
sorted by mapKey
{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ .Scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour]
.Delete
Removes the given key
{{ .Scratch.Delete "greetings" }}
Scope
The scope of the backing data is global for the given Page
or Shortcode
, and spans partial and shortcode includes.
Note that .Scratch
from a shortcode will return the shortcode's Scratch
, which in most cases is what you want. If you want to store it in the page scoped Scratch, then use .Page.Scratch
.