summaryrefslogtreecommitdiffstats
path: root/docs/content/en/functions/go-template
diff options
context:
space:
mode:
Diffstat (limited to 'docs/content/en/functions/go-template')
-rw-r--r--docs/content/en/functions/go-template/_index.md7
-rw-r--r--docs/content/en/functions/go-template/and.md22
-rw-r--r--docs/content/en/functions/go-template/block.md53
-rw-r--r--docs/content/en/functions/go-template/break.md31
-rw-r--r--docs/content/en/functions/go-template/continue.md32
-rw-r--r--docs/content/en/functions/go-template/define.md50
-rw-r--r--docs/content/en/functions/go-template/else.md65
-rw-r--r--docs/content/en/functions/go-template/end.md60
-rw-r--r--docs/content/en/functions/go-template/if.md50
-rw-r--r--docs/content/en/functions/go-template/len.md47
-rw-r--r--docs/content/en/functions/go-template/not.md33
-rw-r--r--docs/content/en/functions/go-template/or.md24
-rw-r--r--docs/content/en/functions/go-template/range.md190
-rw-r--r--docs/content/en/functions/go-template/return.md96
-rw-r--r--docs/content/en/functions/go-template/template.md46
-rw-r--r--docs/content/en/functions/go-template/try.md111
-rw-r--r--docs/content/en/functions/go-template/urlquery.md27
-rw-r--r--docs/content/en/functions/go-template/with.md92
18 files changed, 1036 insertions, 0 deletions
diff --git a/docs/content/en/functions/go-template/_index.md b/docs/content/en/functions/go-template/_index.md
new file mode 100644
index 000000000..627dc2849
--- /dev/null
+++ b/docs/content/en/functions/go-template/_index.md
@@ -0,0 +1,7 @@
+---
+title: Go template functions, operators, and statements
+linkTitle: go template
+description: These are the functions, operators, and statements provided by Go's text/template package.
+categories: []
+keywords: []
+---
diff --git a/docs/content/en/functions/go-template/and.md b/docs/content/en/functions/go-template/and.md
new file mode 100644
index 000000000..77906df52
--- /dev/null
+++ b/docs/content/en/functions/go-template/and.md
@@ -0,0 +1,22 @@
+---
+title: and
+description: Returns the first falsy argument. If all arguments are truthy, returns the last argument.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType: any
+ signatures: [and VALUE...]
+---
+
+{{% include "/_common/functions/truthy-falsy.md" %}}
+
+```go-html-template
+{{ and 1 0 "" }} → 0 (int)
+{{ and 1 false 0 }} → false (bool)
+
+{{ and 1 2 3 }} → 3 (int)
+{{ and "a" "b" "c" }} → c (string)
+{{ and "a" 1 true }} → true (bool)
+```
diff --git a/docs/content/en/functions/go-template/block.md b/docs/content/en/functions/go-template/block.md
new file mode 100644
index 000000000..bffab1f8c
--- /dev/null
+++ b/docs/content/en/functions/go-template/block.md
@@ -0,0 +1,53 @@
+---
+title: block
+description: Defines a template and executes it in place.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [block NAME CONTEXT]
+---
+
+A block is shorthand for defining a template:
+
+```go-html-template
+{{ define "name" }} T1 {{ end }}
+```
+
+and then executing it in place:
+
+```go-html-template
+{{ template "name" pipeline }}
+```
+The typical use is to define a set of root templates that are then customized by redefining the block templates within.
+
+```go-html-template {file="layouts/_default/baseof.html"}
+<body>
+ <main>
+ {{ block "main" . }}
+ {{ print "default value if 'main' template is empty" }}
+ {{ end }}
+ </main>
+</body>
+```
+
+```go-html-template {file="layouts/_default/single.html"}
+{{ define "main" }}
+ <h1>{{ .Title }}</h1>
+ {{ .Content }}
+{{ end }}
+```
+
+```go-html-template {file="layouts/_default/list.html"}
+{{ define "main" }}
+ <h1>{{ .Title }}</h1>
+ {{ .Content }}
+ {{ range .Pages }}
+ <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+ {{ end }}
+{{ end }}
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
diff --git a/docs/content/en/functions/go-template/break.md b/docs/content/en/functions/go-template/break.md
new file mode 100644
index 000000000..9236ec91e
--- /dev/null
+++ b/docs/content/en/functions/go-template/break.md
@@ -0,0 +1,31 @@
+---
+title: break
+description: Used with the range statement, stops the innermost iteration and bypasses all remaining iterations.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [break]
+---
+
+This template code:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $s }}
+ {{ if eq . "bar" }}
+ {{ break }}
+ {{ end }}
+ <p>{{ . }}</p>
+{{ end }}
+```
+
+Is rendered to:
+
+```html
+<p>foo</p>
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
diff --git a/docs/content/en/functions/go-template/continue.md b/docs/content/en/functions/go-template/continue.md
new file mode 100644
index 000000000..0b9339bf4
--- /dev/null
+++ b/docs/content/en/functions/go-template/continue.md
@@ -0,0 +1,32 @@
+---
+title: continue
+description: Used with the range statement, stops the innermost iteration and continues to the next iteration.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [continue]
+---
+
+This template code:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $s }}
+ {{ if eq . "bar" }}
+ {{ continue }}
+ {{ end }}
+ <p>{{ . }}</p>
+{{ end }}
+```
+
+Is rendered to:
+
+```html
+<p>foo</p>
+<p>baz</p>
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
diff --git a/docs/content/en/functions/go-template/define.md b/docs/content/en/functions/go-template/define.md
new file mode 100644
index 000000000..19762a3d6
--- /dev/null
+++ b/docs/content/en/functions/go-template/define.md
@@ -0,0 +1,50 @@
+---
+title: define
+description: Defines a template.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [define NAME]
+---
+
+Use with the [`block`] statement:
+
+```go-html-template
+{{ block "main" . }}
+ {{ print "default value if 'main' template is empty" }}
+{{ end }}
+
+{{ define "main" }}
+ <h1>{{ .Title }}</h1>
+ {{ .Content }}
+{{ end }}
+```
+
+Use with the [`partial`] function:
+
+```go-html-template
+{{ partial "inline/foo.html" (dict "answer" 42) }}
+
+{{ define "partials/inline/foo.html" }}
+ {{ printf "The answer is %v." .answer }}
+{{ end }}
+```
+
+Use with the [`template`] function:
+
+```go-html-template
+{{ template "foo" (dict "answer" 42) }}
+
+{{ define "foo" }}
+ {{ printf "The answer is %v." .answer }}
+{{ end }}
+```
+
+[`block`]: /functions/go-template/block/
+[`template`]: /functions/go-template/block/
+[`partial`]: /functions/partials/include/
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
diff --git a/docs/content/en/functions/go-template/else.md b/docs/content/en/functions/go-template/else.md
new file mode 100644
index 000000000..db3980070
--- /dev/null
+++ b/docs/content/en/functions/go-template/else.md
@@ -0,0 +1,65 @@
+---
+title: else
+description: Begins an alternate block for if, with, and range statements.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [else VALUE]
+---
+
+Use with the [`if`] statement:
+
+```go-html-template
+{{ $var := "foo" }}
+{{ if $var }}
+ {{ $var }} → foo
+{{ else }}
+ {{ print "var is falsy" }}
+{{ end }}
+```
+
+Use with the [`with`] statement:
+
+```go-html-template
+{{ $var := "foo" }}
+{{ with $var }}
+ {{ . }} → foo
+{{ else }}
+ {{ print "var is falsy" }}
+{{ end }}
+```
+
+Use with the [`range`] statement:
+
+```go-html-template
+{{ $var := slice 1 2 3 }}
+{{ range $var }}
+ {{ . }} → 1 2 3
+{{ else }}
+ {{ print "var is falsy" }}
+{{ end }}
+```
+
+Use `else if` to check multiple conditions.
+
+```go-html-template
+{{ $var := 12 }}
+{{ if eq $var 6 }}
+ {{ print "var is 6" }}
+{{ else if eq $var 7 }}
+ {{ print "var is 7" }}
+{{ else if eq $var 42 }}
+ {{ print "var is 42" }}
+{{ else }}
+ {{ print "var is something else" }}
+{{ end }}
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
+
+[`if`]: /functions/go-template/if/
+[`with`]: /functions/go-template/with/
+[`range`]: /functions/go-template/range/
diff --git a/docs/content/en/functions/go-template/end.md b/docs/content/en/functions/go-template/end.md
new file mode 100644
index 000000000..6de120724
--- /dev/null
+++ b/docs/content/en/functions/go-template/end.md
@@ -0,0 +1,60 @@
+---
+title: end
+description: Terminates if, with, range, block, and define statements.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [end]
+---
+
+Use with the [`if`] statement:
+
+```go-html-template
+{{ $var := "foo" }}
+{{ if $var }}
+ {{ $var }} → foo
+{{ end }}
+```
+
+Use with the [`with`] statement:
+
+```go-html-template
+{{ $var := "foo" }}
+{{ with $var }}
+ {{ . }} → foo
+{{ end }}
+```
+
+Use with the [`range`] statement:
+
+```go-html-template
+{{ $var := slice 1 2 3 }}
+{{ range $var }}
+ {{ . }} → 1 2 3
+{{ end }}
+```
+
+Use with the [`block`] statement:
+
+```go-html-template
+{{ block "main" . }}{{ end }}
+```
+
+Use with the [`define`] statement:
+
+```go-html-template
+{{ define "main" }}
+ {{ print "this is the main section" }}
+{{ end }}
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
+
+[`block`]: /functions/go-template/block/
+[`define`]: /functions/go-template/define/
+[`if`]: /functions/go-template/if/
+[`range`]: /functions/go-template/range/
+[`with`]: /functions/go-template/with/
diff --git a/docs/content/en/functions/go-template/if.md b/docs/content/en/functions/go-template/if.md
new file mode 100644
index 000000000..af2989cca
--- /dev/null
+++ b/docs/content/en/functions/go-template/if.md
@@ -0,0 +1,50 @@
+---
+title: if
+description: Executes the block if the expression is truthy.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [if EXPR]
+---
+
+{{% include "/_common/functions/truthy-falsy.md" %}}
+
+```go-html-template
+{{ $var := "foo" }}
+{{ if $var }}
+ {{ $var }} → foo
+{{ end }}
+```
+
+Use with the [`else`] statement:
+
+```go-html-template
+{{ $var := "foo" }}
+{{ if $var }}
+ {{ $var }} → foo
+{{ else }}
+ {{ print "var is falsy" }}
+{{ end }}
+```
+
+Use `else if` to check multiple conditions:
+
+```go-html-template
+{{ $var := 12 }}
+{{ if eq $var 6 }}
+ {{ print "var is 6" }}
+{{ else if eq $var 7 }}
+ {{ print "var is 7" }}
+{{ else if eq $var 42 }}
+ {{ print "var is 42" }}
+{{ else }}
+ {{ print "var is something else" }}
+{{ end }}
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
+
+[`else`]: /functions/go-template/else/
diff --git a/docs/content/en/functions/go-template/len.md b/docs/content/en/functions/go-template/len.md
new file mode 100644
index 000000000..6a13784e3
--- /dev/null
+++ b/docs/content/en/functions/go-template/len.md
@@ -0,0 +1,47 @@
+---
+title: len
+description: Returns the length of a string, slice, map, or collection.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType: int
+ signatures: [len VALUE]
+aliases: [/functions/len]
+---
+
+With a string:
+
+```go-html-template
+{{ "ab" | len }} → 2
+{{ "" | len }} → 0
+```
+
+With a slice:
+
+```go-html-template
+{{ slice "a" "b" | len }} → 2
+{{ slice | len }} → 0
+```
+
+With a map:
+
+```go-html-template
+{{ dict "a" 1 "b" 2 | len }} → 2
+{{ dict | len }} → 0
+```
+
+With a collection:
+
+```go-html-template
+{{ site.RegularPages | len }} → 42
+```
+
+You may also determine the number of pages in a collection with:
+
+```go-html-template
+{{ site.RegularPages.Len }} → 42
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
diff --git a/docs/content/en/functions/go-template/not.md b/docs/content/en/functions/go-template/not.md
new file mode 100644
index 000000000..fd8b9afae
--- /dev/null
+++ b/docs/content/en/functions/go-template/not.md
@@ -0,0 +1,33 @@
+---
+title: not
+description: Returns the boolean negation of its single argument.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType: bool
+ signatures: [not VALUE]
+---
+
+Unlike the `and` and `or` operators, the `not` operator always returns a boolean value.
+
+```go-html-template
+{{ not true }} → false
+{{ not false }} → true
+
+{{ not 1 }} → false
+{{ not 0 }} → true
+
+{{ not "x" }} → false
+{{ not "" }} → true
+```
+
+Use the `not` operator, twice in succession, to cast any value to a boolean value. For example:
+
+```go-html-template
+{{ 42 | not | not }} → true
+{{ "" | not | not }} → false
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
diff --git a/docs/content/en/functions/go-template/or.md b/docs/content/en/functions/go-template/or.md
new file mode 100644
index 000000000..2f55fe479
--- /dev/null
+++ b/docs/content/en/functions/go-template/or.md
@@ -0,0 +1,24 @@
+---
+title: or
+description: Returns the first truthy argument. If all arguments are falsy, returns the last argument.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType: any
+ signatures: [or VALUE...]
+---
+
+{{% include "/_common/functions/truthy-falsy.md" %}}
+
+```go-html-template
+{{ or 0 1 2 }} → 1
+{{ or false "a" 1 }} → a
+{{ or 0 true "a" }} → true
+
+{{ or false "" 0 }} → 0
+{{ or 0 "" false }} → false
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
diff --git a/docs/content/en/functions/go-template/range.md b/docs/content/en/functions/go-template/range.md
new file mode 100644
index 000000000..a06907c79
--- /dev/null
+++ b/docs/content/en/functions/go-template/range.md
@@ -0,0 +1,190 @@
+---
+title: range
+description: Iterates over a non-empty collection, binds context (the dot) to successive elements, and executes the block.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [range COLLECTION]
+aliases: [/functions/range]
+---
+
+{{% include "/_common/functions/truthy-falsy.md" %}}
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $s }}
+ {{ . }} → foo bar baz
+{{ end }}
+```
+
+Use with the [`else`] statement:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $s }}
+ <p>{{ . }}</p>
+{{ else }}
+ <p>The collection is empty</p>
+{{ end }}
+```
+
+Within a range block:
+
+- Use the [`continue`] statement to stop the innermost iteration and continue to the next iteration
+- Use the [`break`] statement to stop the innermost iteration and bypass all remaining iterations
+
+## Understanding context
+
+At the top of a page template, the [context](g) (the dot) is a `Page` object. Within the `range` block, the context is bound to each successive element.
+
+With this contrived example that uses the [`seq`] function to generate a slice of integers:
+
+```go-html-template
+{{ range seq 3 }}
+ {{ .Title }}
+{{ end }}
+```
+
+Hugo will throw an error:
+
+ can't evaluate field Title in type int
+
+The error occurs because we are trying to use the `.Title` method on an integer instead of a `Page` object. Within the `range` block, if we want to render the page title, we need to get the context passed into the template.
+
+> [!note]
+> Use the `$` to get the context passed into the template.
+
+This template will render the page title three times:
+
+```go-html-template
+{{ range seq 3 }}
+ {{ $.Title }}
+{{ end }}
+```
+
+> [!note]
+> Gaining a thorough understanding of context is critical for anyone writing template code.
+
+## Array or slice of scalars
+
+This template code:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $s }}
+ <p>{{ . }}</p>
+{{ end }}
+```
+
+Is rendered to:
+
+```html
+<p>foo</p>
+<p>bar</p>
+<p>baz</p>
+```
+
+This template code:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $v := $s }}
+ <p>{{ $v }}</p>
+{{ end }}
+```
+
+Is rendered to:
+
+```html
+<p>foo</p>
+<p>bar</p>
+<p>baz</p>
+```
+
+This template code:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $k, $v := $s }}
+ <p>{{ $k }}: {{ $v }}</p>
+{{ end }}
+```
+
+Is rendered to:
+
+```html
+<p>0: foo</p>
+<p>1: bar</p>
+<p>2: baz</p>
+```
+
+## Array or slice of maps
+
+This template code:
+
+```go-html-template
+{{ $m := slice
+ (dict "name" "John" "age" 30)
+ (dict "name" "Will" "age" 28)
+ (dict "name" "Joey" "age" 24)
+}}
+{{ range $m }}
+ <p>{{ .name }} is {{ .age }}</p>
+{{ end }}
+```
+
+Is rendered to:
+
+```html
+<p>John is 30</p>
+<p>Will is 28</p>
+<p>Joey is 24</p>
+```
+
+## Array or slice of pages
+
+This template code:
+
+```go-html-template
+{{ range where site.RegularPages "Type" "articles" }}
+ <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+{{ end }}
+```
+
+Is rendered to:
+
+```html
+<h2><a href="/articles/article-3/">Article 3</a></h2>
+<h2><a href="/articles/article-2/">Article 2</a></h2>
+<h2><a href="/articles/article-1/">Article 1</a></h2>
+```
+
+## Maps
+
+This template code:
+
+```go-html-template
+{{ $m := dict "name" "John" "age" 30 }}
+{{ range $k, $v := $m }}
+ <p>key = {{ $k }} value = {{ $v }}</p>
+{{ end }}
+```
+
+Is rendered to:
+
+```go-html-template
+<p>key = age value = 30</p>
+<p>key = name value = John</p>
+```
+
+Unlike ranging over an array or slice, Hugo sorts by key when ranging over a map.
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
+
+[`break`]: /functions/go-template/break/
+[`continue`]: /functions/go-template/continue/
+[`else`]: /functions/go-template/else/
+[`seq`]: /functions/collections/seq/
diff --git a/docs/content/en/functions/go-template/return.md b/docs/content/en/functions/go-template/return.md
new file mode 100644
index 000000000..eb6ba30cd
--- /dev/null
+++ b/docs/content/en/functions/go-template/return.md
@@ -0,0 +1,96 @@
+---
+title: return
+description: Used within partial templates, terminates template execution and returns the given value, if any.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType: any
+ signatures: ['return [VALUE]']
+---
+
+The `return` statement is a non-standard extension to Go's [text/template package]. Used within partial templates, the `return` statement terminates template execution and returns the given value, if any.
+
+The returned value may be of any data type including, but not limited to, [`bool`](g), [`float`](g), [`int`](g), [`map`](g), [`resource`](g), [`slice`](g), or [`string`](g).
+
+A `return` statement without a value returns an empty string of type `template.HTML`.
+
+> [!note]
+> Unlike `return` statements in other languages, Hugo executes the first occurrence of the `return` statement regardless of its position within logical blocks. See [usage](#usage) notes below.
+
+## Example
+
+By way of example, let's create a partial template that _renders_ HTML, describing whether the given number is odd or even:
+
+```go-html-template {file="layouts/partials/odd-or-even.html"}
+{{ if math.ModBool . 2 }}
+ <p>{{ . }} is even</p>
+{{ else }}
+ <p>{{ . }} is odd</p>
+{{ end }}
+```
+
+When called, the partial renders HTML:
+
+```go-html-template
+{{ partial "odd-or-even.html" 42 }} → <p>42 is even</p>
+```
+
+Instead of rendering HTML, let's create a partial that _returns_ a boolean value, reporting whether the given number is even:
+
+```go-html-template {file="layouts/partials/is-even.html"}
+{{ return math.ModBool . 2 }}
+```
+
+With this template:
+
+```go-html-template
+{{ $number := 42 }}
+{{ if partial "is-even.html" $number }}
+ <p>{{ $number }} is even</p>
+{{ else }}
+ <p>{{ $number }} is odd</p>
+{{ end }}
+```
+
+Hugo renders:
+
+```html
+<p>42 is even</p>
+```
+
+See additional examples in the [partial templates] section.
+
+## Usage
+
+> [!note]
+> Unlike `return` statements in other languages, Hugo executes the first occurrence of the `return` statement regardless of its position within logical blocks.
+
+A partial that returns a value must contain only one `return` statement, placed at the end of the template.
+
+For example:
+
+```go-html-template {file="layouts/partials/is-even.html"}
+{{ $result := false }}
+{{ if math.ModBool . 2 }}
+ {{ $result = "even" }}
+{{ else }}
+ {{ $result = "odd" }}
+{{ end }}
+{{ return $result }}
+```
+
+> [!note]
+> The construct below is incorrect; it contains more than one `return` statement.
+
+```go-html-template {file="layouts/partials/do-not-do-this.html"}
+{{ if math.ModBool . 2 }}
+ {{ return "even" }}
+{{ else }}
+ {{ return "odd" }}
+{{ end }}
+```
+
+[partial templates]: /templates/partial/#returning-a-value-from-a-partial
+[text/template package]: https://pkg.go.dev/text/template
diff --git a/docs/content/en/functions/go-template/template.md b/docs/content/en/functions/go-template/template.md
new file mode 100644
index 000000000..dac1fa3be
--- /dev/null
+++ b/docs/content/en/functions/go-template/template.md
@@ -0,0 +1,46 @@
+---
+title: template
+description: Executes the given template, optionally passing context.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: ['template NAME [CONTEXT]']
+---
+
+Use the `template` function to execute [embedded templates]. For example:
+
+```go-html-template
+{{ range (.Paginate .Pages).Pages }}
+ <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+{{ end }}
+{{ template "_internal/pagination.html" . }}
+```
+
+You can also use the `template` function to execute a defined template:
+
+```go-html-template
+{{ template "foo" (dict "answer" 42) }}
+
+{{ define "foo" }}
+ {{ printf "The answer is %v." .answer }}
+{{ end }}
+```
+
+The example above can be rewritten using an [inline partial] template:
+
+```go-html-template
+{{ partial "inline/foo.html" (dict "answer" 42) }}
+
+{{ define "partials/inline/foo.html" }}
+ {{ printf "The answer is %v." .answer }}
+{{ end }}
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
+
+[`partial`]: /functions/partials/include/
+[inline partial]: /templates/partial/#inline-partials
+[embedded templates]: /templates/embedded/
diff --git a/docs/content/en/functions/go-template/try.md b/docs/content/en/functions/go-template/try.md
new file mode 100644
index 000000000..6aef4da36
--- /dev/null
+++ b/docs/content/en/functions/go-template/try.md
@@ -0,0 +1,111 @@
+---
+title: try
+description: Returns a TryValue object after evaluating the given expression.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType: TryValue
+ signatures: ['try EXPRESSION']
+---
+
+{{< new-in 0.141.0 />}}
+
+The `try` statement is a non-standard extension to Go's [text/template] package. It introduces a mechanism for handling errors within templates, mimicking the `try-catch` constructs found in other programming languages.
+
+## Methods
+
+The `TryValue` object encapsulates the result of evaluating the expression, and provides two methods:
+
+### Err
+
+(`string`) Returns a string representation of the error thrown by the expression, if an error occurred, or returns `nil` if the expression evaluated without errors.
+
+### Value
+
+(`any`) Returns the result of the expression if the evaluation was successful, or returns `nil` if an error occurred while evaluating the expression.
+
+## Explanation
+
+By way of example, let's divide a number by zero:
+
+```go-html-template
+{{ $x := 1 }}
+{{ $y := 0 }}
+{{ $result := div $x $y }}
+{{ printf "%v divided by %v equals %v" $x $y .Value }}
+```
+
+As expected, the example above throws an error and fails the build:
+
+```terminfo
+Error: error calling div: can't divide the value by 0
+```
+
+Instead of failing the build, we can catch the error and emit a warning:
+
+```go-html-template
+{{ $x := 1 }}
+{{ $y := 0 }}
+{{ with try (div $x $y) }}
+ {{ with .Err }}
+ {{ warnf "%s" . }}
+ {{ else }}
+ {{ printf "%v divided by %v equals %v" $x $y .Value }}
+ {{ end }}
+{{ end }}
+```
+
+The error thrown by the expression is logged to the console as a warning:
+
+```terminfo
+WARN error calling div: can't divide the value by 0
+```
+
+Now let's change the arguments to avoid dividing by zero:
+
+```go-html-template
+{{ $x := 42 }}
+{{ $y := 6 }}
+{{ with try (div $x $y) }}
+ {{ with .Err }}
+ {{ warnf "%s" . }}
+ {{ else }}
+ {{ printf "%v divided by %v equals %v" $x $y .Value }}
+ {{ end }}
+{{ end }}
+```
+
+Hugo renders the above to:
+
+```html
+42 divided by 6 equals 7
+```
+
+## Example
+
+Error handling is essential when using the [`resources.GetRemote`] function to capture remote resources such as data or images. When calling this function, if the HTTP request fails, Hugo will fail the build.
+
+Instead of failing the build, we can catch the error and emit a warning:
+
+```go-html-template
+{{ $url := "https://broken-example.org/images/a.jpg" }}
+{{ with try (resources.GetRemote $url) }}
+ {{ with .Err }}
+ {{ warnf "%s" . }}
+ {{ else with .Value }}
+ <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt="">
+ {{ else }}
+ {{ warnf "Unable to get remote resource %q" $url }}
+ {{ end }}
+{{ end }}
+```
+In the above, note that the [context](g) within the last conditional block is the `TryValue` object returned by the `try` statement. At this point neither the `Err` nor `Value` methods returned anything, so the current context is not useful. Use the `$` to access the [template context] if needed.
+
+> [!note]
+> Hugo does not classify an HTTP response with status code 404 as an error. In this case `resources.GetRemote` returns nil.
+
+[`resources.GetRemote`]: /functions/resources/getremote/
+[template context]: /templates/introduction/#template-context
+[text/template]: https://pkg.go.dev/text/template
diff --git a/docs/content/en/functions/go-template/urlquery.md b/docs/content/en/functions/go-template/urlquery.md
new file mode 100644
index 000000000..dc97f867e
--- /dev/null
+++ b/docs/content/en/functions/go-template/urlquery.md
@@ -0,0 +1,27 @@
+---
+title: urlquery
+description: Returns the escaped value of the textual representation of its arguments in a form suitable for embedding in a URL query.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType: string
+ signatures: ['urlquery VALUE [VALUE...]']
+aliases: [/functions/urlquery]
+---
+
+This template code:
+
+```go-html-template
+{{ $u := urlquery "https://" "example.com" | safeURL }}
+<a href="https://example.org?url={{ $u }}">Link</a>
+```
+
+Is rendered to:
+
+```html
+<a href="https://example.org?url=https%3A%2F%2Fexample.com">Link</a>
+```
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
diff --git a/docs/content/en/functions/go-template/with.md b/docs/content/en/functions/go-template/with.md
new file mode 100644
index 000000000..c25ce3fba
--- /dev/null
+++ b/docs/content/en/functions/go-template/with.md
@@ -0,0 +1,92 @@
+---
+title: with
+description: Binds context (the dot) to the expression and executes the block if expression is truthy.
+categories: []
+keywords: []
+params:
+ functions_and_methods:
+ aliases: []
+ returnType:
+ signatures: [with EXPR]
+aliases: [/functions/with]
+---
+
+{{% include "/_common/functions/truthy-falsy.md" %}}
+
+```go-html-template
+{{ $var := "foo" }}
+{{ with $var }}
+ {{ . }} → foo
+{{ end }}
+```
+
+Use with the [`else`] statement:
+
+```go-html-template
+{{ $var := "foo" }}
+{{ with $var }}
+ {{ . }} → foo
+{{ else }}
+ {{ print "var is falsy" }}
+{{ end }}
+```
+
+Use `else with` to check multiple conditions:
+
+```go-html-template
+{{ $v1 := 0 }}
+{{ $v2 := 42 }}
+{{ with $v1 }}
+ {{ . }}
+{{ else with $v2 }}
+ {{ . }} → 42
+{{ else }}
+ {{ print "v1 and v2 are falsy" }}
+{{ end }}
+```
+
+Initialize a variable, scoped to the current block:
+
+```go-html-template
+{{ with $var := 42 }}
+ {{ . }} → 42
+ {{ $var }} → 42
+{{ end }}
+{{ $var }} → undefined
+```
+
+## Understanding context
+
+At the top of a page template, the [context](g) (the dot) is a `Page` object. Inside of the `with` block, the context is bound to the value passed to the `with` statement.
+
+With this contrived example:
+
+```go-html-template
+{{ with 42 }}
+ {{ .Title }}
+{{ end }}
+```
+
+Hugo will throw an error:
+
+ can't evaluate field Title in type int
+
+The error occurs because we are trying to use the `.Title` method on an integer instead of a `Page` object. Inside of the `with` block, if we want to render the page title, we need to get the context passed into the template.
+
+> [!note]
+> Use the `$` to get the context passed into the template.
+
+This template will render the page title as desired:
+
+```go-html-template
+{{ with 42 }}
+ {{ $.Title }}
+{{ end }}
+```
+
+> [!note]
+> Gaining a thorough understanding of context is critical for anyone writing template code.
+
+{{% include "/_common/functions/go-template/text-template.md" %}}
+
+[`else`]: /functions/go-template/else/