使用 Hugo,如何从基本文件中定义的部分文件访问变量?

Using Hugo, how can I access a variable from a partial file that is defined in base file?

我刚开始使用 Hugo 和 Go 模板。如何使用 Hugo 从基本文件中定义的部分文件访问变量?

例如:我有一个 index.html 文件,其中包含读取数据目录中 events.json 文件中存储的数据并将其存储在变量中的代码。如何从另一个文件访问该变量?

index.html

{{ $events := .Site.Data.events }}

{{ partial "people" . }}

people.html

// access the events variable from the index.html
{{ $events }}

我真的希望这是有道理的。如果需要,我可以尝试澄清更多。

根据雨果 documentation:

... partial calls receive two parameters.

  1. The first is the name of the partial and determines the file location to be read.
  2. The second is the variables to be passed down to the partial.

This means that the partial will only be able to access those variables. It is isolated and has no access to the outer scope.

这意味着,events 变量 people.html 的范围 之外。您的 people.html 无法“看到”它。一种解决方案是将其传递下去,例如:

{{ partial "people" . $events }}

如果不起作用,请尝试不同的表示法($.)。

如果这不起作用,您可以随时再次调用您的数据文件,不带变量,就像在 examples 中一样,也就是说,在您的 people.html 部分中使用 {{ .Site.Data.events }} .

在评论中让我知道进展如何,如有必要,我会尝试改进我的答案。我知道离开 Hugo 边界进入 Go 领域是一件痛苦的事情:)

您可以使用 dict 函数:

{{ partial "people" (dict "page" . "events" $events) }}

然后您将在部分中像 {{ .page.someVar }}{{ .events.someVar }} 这样称呼它们。

在你的情况下,一个替代方案可能是,在部分中(如前一位发帖人所说),直接从部分中解决 .Site.Data.events

0.15引入了map that can be used for this.

index.html

{{ $events := .Site.Data.events }}
{{ partial "people" (dict "events" $events) }}

people.html

// access the events variable from the index.html
{{ .events }}