雨果主题中的变量无法按预期运行

时间:2019-09-23 12:43:46

标签: hugo

我最近遇到了一个问题,无法独自解决。

在我的代码$locale中返回当前语言,默认值为en

{{ $locale := .Site.Language.Lang }}

接着,我检查了以下两个表达式的输出

{{ (index .Site.Data $locale).nav.sidebar.navItems }}
{{ (index .Site.Data "en").nav.sidebar.navItems }}

正确返回相同的数据。 sidebar.json 文件如下:

{
  "navItems": [
    {
      "id": 1,
      "title": "Parent",
      "url": "/",
      "parent": null
    },
    {
      "id": 2,
      "title": "Child",
      "url": "/",
      "parent": {
        "id": 1
      }
    },
...
  ]
}

在下面的代码中

{{ $menus := (index .Site.Data $locale).nav.sidebar.navItems }}
{{ $mainMenus := where $menus "parent" nil }}

我收到错误消息error calling where: can't iterate over <nil> 但是当我将其更改为

{{ $menus := (index .Site.Data "en").nav.sidebar.navItems }}

结果符合预期。 我不希望由于我将在我的应用中使用其他语言而对语言进行硬编码。

1 个答案:

答案 0 :(得分:0)

我创建了这样的解决方法:

{{ $locale := .Site.Language.Lang }}
{{ $menus := (index .Site.Data $locale).nav.footer.navItems }}
{{ $mainMenus := slice }}
{{ $subMenus := slice }}
{{ range $menus }}
  {{ if (isset .parent "id") }}
    {{ $subMenus = $subMenus | append . }}
  {{ else }}
    {{ $mainMenus = $mainMenus | append . }}
  {{ end }}
{{ end }}

但是我仍然很困惑为什么locale变量不能与where函数一起使用。