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

时间:2017-02-08 22:20:55

标签: global-variables template-engine partials go-templates hugo

我是使用rule of thirds和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 }}

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

3 个答案:

答案 0 :(得分:8)

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 }}

答案 1 :(得分:3)

您可以使用dict功能:

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

然后,您将在部分内容{{ .page.someVar }}{{ .events.someVar }}中解决这些问题。

在您的情况下,替代方案可能是部分(如前一张海报所述),直接从部分地址.Site.Data.events

答案 2 :(得分:0)

根据雨果documentation

  

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

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

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

这意味着,events变量<{1>}范围之外的。您的people.html无法“看到”它。一种解决方案是传递它,如:

people.html

如果不起作用,请尝试其他符号({{ partial "people" . $events }} $)。

如果这不起作用,您可以随时再次调用您的数据文件,而不是变量,就像在examples中一样,即在.部分中使用{{ .Site.Data.events }}。 / p>

请在评论中告诉我它是怎么回事,如果有必要,我会尽力改善我的答案。我知道从Hugo边界进入Go领域是痛苦的:)