通过Scratch将值传递给shortcode-不起作用

问题描述

我正在尝试在页面模板的.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 }}