mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-14 20:37:55 -05:00
efa74c5c6e
ac2c4a487 Update documentation for Ugly URLs (#1082) 88bdec17a Change 072.0 to 0.72.0 in release post's description 2aa7d7818 Update rss.md (#1104) c80677aeb Update quick-start.md (#1076) d04196bbd Minor spelling and capitalization fixes 837d2feba Fixed spelling mistake 67dc78e12 Update installing.md ce280c5d6 Update relurl.md bb4d0e703 Capitalization and Redirecting URL fixes e1fecada0 Update partials.md 1d99bb182 Typos and whitespacing issues fixed b20dba125 actually fix index function link this time f47d6f1e3 Fixing typos, whitespace issues and links dc82309b9 fix link to the index function 1eab0cbea add missing word (#1130) 9c3ee62ae more fixes e9bc5880a whitespace, typos and HTTPS fixes 93b806493 Add missing word to Module section 80ced9062 Display image on page bundles page. 727029b0a Update index.md 51fc48e4d Release 0.72.0 1ff68ac3b releaser: Add release notes to /docs for release of 0.72.0 f74a25b92 common/maps: Add Scratch.Values 2fd83db96 Add redirect support to the server bdfccf9f4 Fix typo in install instructions e12737ea6 Create SUPPORT.md git-subtree-dir: docs git-subtree-split: ac2c4a4871e90ddfb180f23704ce7ec9023529ca
129 lines
3.5 KiB
Markdown
129 lines
3.5 KiB
Markdown
---
|
|
title: .Scratch
|
|
description: Acts as a "scratchpad" to allow for writable page- or shortcode-scoped variables.
|
|
godocref:
|
|
date: 2017-02-01
|
|
publishdate: 2017-02-01
|
|
lastmod: 2017-02-01
|
|
keywords: [iteration]
|
|
categories: [functions]
|
|
menu:
|
|
docs:
|
|
parent: "functions"
|
|
toc:
|
|
signature: []
|
|
workson: []
|
|
hugoversion:
|
|
relatedfuncs: []
|
|
deprecated: false
|
|
draft: false
|
|
aliases: [/extras/scratch/,/doc/scratch/]
|
|
---
|
|
|
|
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](https://github.com/golang/go/issues/10608) for the main motivation behind Scratch.
|
|
{{% /note %}}
|
|
|
|
{{% note %}}
|
|
For a detailed analysis of `.Scratch` and in context use cases, see this [post](https://regisphilibert.com/blog/2017/04/hugo-scratch-explained-variable/).
|
|
{{% /note %}}
|
|
|
|
## Get a Scratch
|
|
|
|
From Hugo `0.43` you can also create a locally scoped `Scratch` by calling `newScratch`:
|
|
|
|
```go-html-template
|
|
$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
|
|
|
|
```go-html-template
|
|
{{ .Scratch.Set "greeting" "Hello" }}
|
|
```
|
|
#### .Get
|
|
Get the value of a given key
|
|
|
|
```go-html-template
|
|
{{ .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.
|
|
|
|
```go-html-template
|
|
{{ .Scratch.Add "greetings" "Hello" }}
|
|
{{ .Scratch.Add "greetings" "Welcome" }}
|
|
----
|
|
{{ .Scratch.Get "greetings" }} > HelloWelcome
|
|
```
|
|
|
|
```go-html-template
|
|
{{ .Scratch.Add "total" 3 }}
|
|
{{ .Scratch.Add "total" 7 }}
|
|
----
|
|
{{ .Scratch.Get "total" }} > 10
|
|
```
|
|
|
|
|
|
```go-html-template
|
|
{{ .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`.
|
|
|
|
```go-html-template
|
|
{{ .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`
|
|
|
|
```go-html-template
|
|
{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
|
|
{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
|
|
----
|
|
{{ .Scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour]
|
|
```
|
|
#### .Delete
|
|
Removes the given key
|
|
|
|
```go-html-template
|
|
{{ .Scratch.Delete "greetings" }}
|
|
```
|
|
|
|
#### .Values
|
|
|
|
`Values` returns the raw backing map. Note that you should just use this method on the locally scoped `Scratch` instances you obtain via `newScratch`, not
|
|
`.Page.Scratch` etc., as that will lead to concurrency issues.
|
|
|
|
## 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`.
|
|
|
|
|
|
|
|
|
|
[pagevars]: /variables/page/
|