2

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

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

index.html

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

{{ partial "people" . }} 

people.html

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

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

ответ

3

0,15 введено map that can be used for this.

index.html

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

people.html

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

Согласно Гюго documentation:

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

  1. Первый - это имя частичного и определяет местоположение файла для чтения.
  2. Вторая переменная, передаваемая частичной.

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

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

{{ partial "people" . $events }} 

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

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

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

+0

'{частичными "люди". $ events}} 'и с использованием' $ 'или' .' нотации тоже не работает – Ishan

3

Вы можете использовать dict FUNC:

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

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

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

+0

хороший материал, я не знал о 'dict'. Кстати, пожалуйста, исправьте закругленную скобку после '$ events', она должна быть фигурной скобкой. Я не могу предложить редактирование, так как он меньше 6 символов. – revelt

+0

Спасибо за исправление (округленная скобка правильная, кстати). – bep