Переменная в теме hugo не работает должным образом - PullRequest
1 голос
/ 23 сентября 2019

У меня недавно возникла проблема, и я не могу решить ее самостоятельно.

В моем коде $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 голосов
/ 23 сентября 2019

Я создал такой обходной путь:

{{ $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.

...