Используя Hugo, как я могу получить доступ к переменной из частичного файла, определенного в базовом файле?

Я новичок в использовании шаблонов Hugo и Go. Как я могу получить доступ к переменной из частичного файла, определенного в базовом файле, с помощью Hugo?

Например: у меня есть файл index.html, который содержит код, который считывает данные, хранящиеся в файле events.json в каталоге данных, и сохраняет их в переменной. Как я могу получить доступ к этой переменной из другого файла?

index.html

{{ $events := .Site.Data.events }}

{{ partial "people" . }}

люди.html

// access the events variable from the index.html
{{ $events }}

Я действительно надеюсь, что это имеет смысл. Я могу попробовать и уточнить больше, если это необходимо.


person Ishan    schedule 08.02.2017    source источник


Ответы (3)


В версии 0.15 появилась карта, которую можно использовать для этого.

index.html

{{ $events := .Site.Data.events }}
{{ partial "people" (dict "events" $events) }}

люди.html

// access the events variable from the index.html
{{ .events }}
person Steven Almeroth    schedule 20.02.2017

Вы можете использовать функцию dict:

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

Затем вы будете обращаться к ним как {{ .page.someVar }} и {{ .events.someVar }} в партиале.

Альтернативой в вашем случае может быть частичное (как сказал предыдущий автор) обращение к .Site.Data.events непосредственно из частичного.

person bep    schedule 19.02.2017
comment
хороший материал, я не знал о dict ???? . Кстати, исправьте, пожалуйста, круглую скобку после $events, она должна быть фигурной. Я не могу предложить редактирование, так как оно меньше 6 символов. - person revelt; 23.02.2017
comment
Спасибо за исправление (круглая скобка правильная, кстати). - person bep; 24.02.2017

Согласно документации Хьюго:

... частичные вызовы получают два параметра.

  1. Первый — это имя партиала, определяющее расположение файла для чтения.
  2. Во-вторых, это переменные, которые будут переданы в партиал.

Это означает, что партиал сможет получить доступ только к этим переменным. Он изолирован и не имеет доступа к внешней области видимости.

Это означает, что переменная events находится вне области действия переменной people.html. Ваш people.html не может его видеть. Одним из решений было бы передать его, например:

{{ partial "people" . $events }}

Если это не работает, попробуйте другую запись ($ против .).

Если это не сработает, вы всегда можете снова вызвать файл данных без переменной, как в примерах, то есть используйте {{ .Site.Data.events }} в партиале people.html.

Дайте мне знать в комментариях, как это происходит, я постараюсь улучшить свой ответ, если это необходимо. Я знаю, что выйти за границы Хьюго на территорию Го — это больно :)

person revelt    schedule 17.02.2017
comment
{ partial "people" . $events }} и использование нотации $ или . также не работает - person Ishan; 23.02.2017
comment
Первый параметр в вашем образце — это люди, второй .. $events — это третий параметр, определяющий, для какого раздела работает партиал. Это не решает проблему. - person Patrick; 13.11.2020