我最近遇到了一个问题,无法独自解决。
在我的代码$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 }}
结果符合预期。 我不希望由于我将在我的应用中使用其他语言而对语言进行硬编码。
答案 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
函数一起使用。