Skip to content

Commit

Permalink
Update content/en/functions/templates/Defer.md
Browse files Browse the repository at this point in the history
Co-authored-by: Joe Mooring <joe@mooring.com>
  • Loading branch information
bep and jmooring committed Jun 25, 2024
1 parent 23d996b commit d67b6d8
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions content/en/functions/templates/Defer.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,10 @@ aliases: [/functions/templates.defer]

{{< new-in "0.128.0" >}}

{{% note %}}
This function only works in combination with the `with` keyword.
{{% /note %}}

In some rare use cases, you may need defer the execution of a template until after all sites and output formats have been rendered. One such example could be [TailwindCSS](https://github.com/bep/hugo-starter-tailwind-basic) using the output of [hugo_stats.json](https://gohugo.io/getting-started/configuration/#configure-build) to determine which classes and other HTML identifiers are being used in the final output:
In some rare use cases, you may need to defer the execution of a template until after all sites and output formats have been rendered. One such example could be [TailwindCSS](https://github.com/bep/hugo-starter-tailwind-basic) using the output of [hugo_stats.json](https://gohugo.io/getting-started/configuration/#configure-build) to determine which classes and other HTML identifiers are being used in the final output:

```go-html-template
{{ with (templates.Defer (dict "key" "styles" )) }}
{{ with (templates.Defer (dict "key" "global-styles" )) }}
{{ $options := dict "inlineImports" true }}
{{ $styles := resources.Get "css/styles.css" }}
{{ $styles = $styles | resources.PostCSS $options }}
Expand All @@ -32,9 +28,13 @@ In some rare use cases, you may need defer the execution of a template until aft
{{ end }}
```

{{% note %}}
This function only works in combination with the `with` keyword.
{{% /note %}}


{{% note %}}
Variables defined on the outside are not visible on the inside and vice versa.
Variables defined on the outside are not visible on the inside and vice versa. To pass in data, use the `data` [option](#options).
{{% /note %}}

For the above to work well when running the server (or `hugo -w`), you want to have a configuration similar to this:
Expand All @@ -46,7 +46,7 @@ source = "hugo_stats.json"
target = "assets/notwatching/hugo_stats.json"
disableWatch = true
[build.buildStats]
writeStats = true
enable = true
[[build.cachebusters]]
source = "assets/notwatching/hugo_stats\\.json"
target = "styles\\.css"
Expand All @@ -69,13 +69,13 @@ data (`map`)
```go-html-template
Language Outside: {{ site.Language.Lang }}
Page Outside: {{ .RelPermalink }}
I18n: {{ i18n "hello" }}
I18n Outside: {{ i18n "hello" }}
{{ $data := (dict "page" . )}}
{{ with (templates.Defer (dict "data" $data )) }}
Language Inside: {{ site.Language.Lang }}
Page Inside: {{ .page.RelPermalink }}
I18n: {{ i18n "hello" }}
I18n Inside: {{ i18n "hello" }}
{{ end }}
```

The [Output Format](/templates/output-formats/), [Site](/methods/page/site/), and [language](/methods/site/language) will be the same, even if the execution is deferred. In the example above, this means that the `site.Language.Lang` and `.RelPermalink` will be the same inside and outside the deferred template.
The [Output Format](/templates/output-formats/), [Site](/methods/page/site/), and [language](/methods/site/language) will be the same, even if the execution is deferred. In the example above, this means that the `site.Language.Lang` and `.RelPermalink` will be the same on the inside and the outside the deferred template.

0 comments on commit d67b6d8

Please sign in to comment.