4

我是使用Hugo和 Go 模板的新手。如何从使用 Hugo 在基本文件中定义的部分文件中访问变量?

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

索引.html

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

{{ partial "people" . }}

人.html

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

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

4

3 回答 3

9

0.15 引入了一个可以用于此的地图

索引.html

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

人.html

// access the events variable from the index.html
{{ .events }}
于 2017-02-20T06:21:27.040 回答
5

你可以使用dict函数:

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

然后,您将像{{ .page.someVar }}{{ .events.someVar }}在部分中一样解决它们。

在您的情况下,另一种选择可能是在部分中(如前一张海报所说),.Site.Data.events直接从部分中解决。

于 2017-02-19T21:28:07.203 回答
-1

根据雨果文档

...部分调用接收两个参数。

  1. 第一个是部分的名称,并确定要读取的文件位置。
  2. 第二个是要传递给部分的变量。

这意味着部分将只能访问这些变量。它是孤立的,无法访问外部范围。

这意味着,该events变量超出people.html. 你people.html无法“看到”它。一种解决方案是将其传递下去,例如:

{{ partial "people" . $events }}

如果它不起作用,请尝试不同的符号($vs. .)。

如果这不起作用,您可以随时再次调用您的数据文件,无需变量,就像在示例中一样,即{{ .Site.Data.events }}在您的people.html部分中使用。

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

于 2017-02-17T14:01:25.290 回答