【问题标题】:.Site.Data values are not accessible inside a range block.Site.Data 值在范围块内不可访问
【发布时间】:2021-06-17 19:44:17
【问题描述】:

所以我刚刚注意到,当我尝试从 .Site 本身在 range 块内访问某些内容时,它返回为空/空白。

这是一个例子:

<div class="row weekday">
  {{ .Site.Data.company.social_media.whatsapp }}
  {{ range $entry := sort .Site.Data.events "order" "asc" }}
  <div class="col-sm-6 col-md-4 col-lg-4">
    {{ .Site.Data.company.social_media.whatsapp }}
    {{ partial "events_detail.html" (dict "entry" $entry) }}
  </div>
  {{ end }}
</div>

第一个.Site.Data.company.social_media.whatsapp(在范围之前)呈现一个电话号码。

第二个.Site.Data.company.social_media.whatsapp(在范围之后)不渲染任何东西。

同样的行为也发生在部分 events_detail.html 中。如果我尝试从部分范围内访问 .Site 它会呈现一个空值。我也尝试通过(dict ...) 传递它,但没有运气。

我在这里错过了什么?

【问题讨论】:

    标签: templates scope hugo static-site


    【解决方案1】:

    我错过了 Hugo 如何管理点的范围。您可以在此处阅读有关此(以及其他重要概念)的更深入的解释:

    https://regisphilibert.com/blog/2018/02/hugo-the-scope-the-context-and-the-dot/

    在简历中是(摘自上面的链接):

    根上下文,在你的 baseof.html 和 layouts 将始终是 Page 上下文。基本上 构建此页面所需的一切都在那个点中。 。标题, .Permalink、.Resources,随你便。

    甚至您网站的信息也使用 .Site 存储在页面上下文中 准备好了。

    但是在 Go Template 中,当你踏入一个函数的那一刻,你就会失去它 上下文作为您宝贵的点或上下文被函数的 自己的……点。

    (...)

    同样的,一旦你打开了一个迭代,范围是上下文 是光标当前指向的任何项目。你会 丢失页面上下文以支持范围上下文。

    {{ range .Data.Pages }}
        {{/* Here the dot is that one page 'at cursor'. */}} 
        {{ .Permalink }}
    {{ end }}
    

    幸运的是,Hugo 将模板文件的根上下文存储在 $ 中,所以没有 无论您在与或范围内的嵌套有多深,您总是可以 检索顶部上下文。在基本模板文件中,一般是 你的页面。

    {{ with .Title }}
        {{/* Dot is .Title */}} 
        <h1>{{ . }}</h1>
        {{/* $ is the top level page */}} 
        <h3>From {{ $.Title }}</h3>
    {{ end }}
    

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 2017-09-24
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2016-06-23
      • 2018-09-22
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多