Разделить шаблон на несколько файлов не предоставляет данные - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть шаблон с 1 файлом (исходный файл) , который работает как положено , теперь, когда он становится больше, я начал делить его на 3 files и просто копировать и вставлять данные из исходный файл на 3 файла, и я смог увидеть, что шаблон был успешно выполнен, но данные отсутствуют в шаблонах start и end, только шаблон main правильно получает данные из structData

например

startTemple.txt

{{define "start"}}
...

{{end}}


main.txt (here i include both template)

{{template "start"}}
...

{{template "end"}}


endTemplate.txt


{{define "end"}}
...
{{end}}

Я использую следующее

t, err := template.New(mainTemplateName).Funcs(funcMap).ParseFiles(startPath, mainPath, endPath)

err = t.Execute(templFile, structData)
if err != nil {
    logs.Logger.Error(err)
}

Я использую точный код, как и раньше, и проблема в том, что данные из structData не появляются в шаблонах start и end после генерации, просто в main правильно получается structData, что может Я скучаю здесь?

шаблоны (начало основного конца) были успешно сгенерированы с жестко закодированными данными , но данные, которые должны поступить с structData, не добавляются во время генерации к start и end шаблоны

Должен ли я как-то добавить structData к start и end?

1 Ответ

0 голосов
/ 02 сентября 2018

Когда вы используете template для вызова другого шаблона, dot не устанавливается по умолчанию, но вы можете передать значение в качестве (необязательного) второго параметра в template следующим образом:

{{template "name"  pipeline}}

В вашем случае ваш main.txt шаблон должен быть

{{template "start" .}}
...
{{template "end" .}}

для передачи значения dot в шаблон start и end.

Поскольку значение dot может быть установлено таким образом, также возможно разбить шаблоны на несколько файлов более сложными способами. Например, у вас может быть HTML-шаблон для отображения информации о пользователе в стиле карточки, и, куда бы вы ни захотели вставить эту карточку в свой вывод, вы можете просто вызвать шаблон и передать его пользователю, даже если окружающий шаблон нужна другая информация, либо в цикле.

Для получения более подробной информации, ознакомьтесь с документами text/template. Это работает как для text/template, так и для html/template, но задокументировано только для text/template, в то время как в начале документации для html/template имеется примечание, в котором сообщается, где можно найти подробную документацию.

...