【问题标题】:Using Hugo, how can I access a variable from a partial file that is defined in base file?使用 Hugo,如何从基本文件中定义的部分文件中访问变量?
【发布时间】:2017-02-24 16:15:54
【问题描述】:

我不熟悉使用 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 }}

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你可以使用dict func:

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

      然后,您将在部分地址中像 {{ .page.someVar }}{{ .events.someVar }} 一样称呼他们。

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

      【讨论】:

      • 好东西,我不知道dict ? 。顺便把$events后面的圆括号固定好,应该是大括号。我不能建议编辑,因为它的长度少于 6 个字符。
      • 感谢指正(圆括号是正确的,顺便说一句)。
      【解决方案3】:

      据雨果documentation

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

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

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

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

      {{ partial "people" . $events }}
      

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

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

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

      【讨论】:

      • { partial "people" . $events }} 并使用 $. 表示法也不起作用
      • 示例中的第一个参数是“people”,第二个参数是“.”。 $events 是第三个参数,它定义了部分工作的部分。这并不能解决问题。
      猜你喜欢
      • 2014-05-26
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多