问题描述
我正在尝试在页面模板的.Scratch
中设置一个值,并以该页面上使用的简码读取它,但是没有运气。
{{< my_shortcode arg="something" >}}
{{ .Scratch.Set "foo" "bar" }}
简码(也在主题中)具有:
the value of foo is {{ .Scratch.Get "foo" }}.
但是呈现的输出具有:
the value of foo is .
我对此进行了多种尝试,包括在两种情况下都将.Scratch
前缀为$
,还尝试从简码文件中的.Page.Scratch
访问它。在所有情况下,我都会得到空的回报。我正在使用v0.75.0-DEV版本。任何指针都非常感谢。
解决方法
据我了解,HUGO页面和简码不共享上下文,因此数据交换受到限制。这导致了一种非常奇怪的情况:
- 页面模板
{{ .Scratch }}
中的是页面的草稿; - 简码模板
{{ .Scratch }}
中的 - 是简码的本地暂存器;
- 简码模板
{{ .Page.Scratch }}
中的 - 是页面的草稿,但它不与页面共享上下文,因此它不同于第一个。
短代码中的{{ .Page.Scratch }}
可用于在单个页面上的所有短代码实例之间共享数据,但不能用于与页面模板共享数据。
在页面上的短代码之间共享数据以仅插入一次JS:
{{ if le (.Page.Scratch.Get "mermaidInserted") 0 }}
<script src="{{ "js/deps/mermaid.min.js" | relURL }}"></script>
{{ .Page.Scratch.Add "mermaidInserted" 1 }}
{{ end }}