Files
2024-09-01 14:51:15 +02:00

2.1 KiB

title, description, categories, keywords, action, aliases, toc
title description categories keywords action aliases toc
with Binds context (the dot) to the expression and executes the block if expression is truthy.
aliases related returnType signatures
functions/go-template/if
functions/go-template/else
functions/go-template/end
functions/collections/IsSet
with EXPR
/functions/with
true

{{% include "functions/go-template/_common/truthy-falsy.md" %}}

{{ $var := "foo" }}
{{ with $var }}
  {{ . }} → foo
{{ end }}

Use with the else statement:

{{ $var := "foo" }}
{{ with $var }}
  {{ . }} → foo
{{ else }}
  {{ print "var is falsy" }}
{{ end }}

Use else with to check multiple conditions:

{{ $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:

{{ with $var := 42 }}
  {{ . }} → 42
  {{ $var }} → 42
{{ end }}
{{ $var }} → undefined

Understanding context

At the top of a page template, the context (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:

{{ 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. {{% /note %}}

This template will render the page title as desired:

{{ with 42 }}
  {{ $.Title }}
{{ end }}

{{% note %}} Gaining a thorough understanding of context is critical for anyone writing template code. {{% /note %}}

{{% include "functions/go-template/_common/text-template.md" %}}