Во-первых, вы должны проверить ошибки, возвращаемые методом Template.ParseFiles()
. Вы сохраняете возвращенную ошибку, но проверяете ее только в конце (и к тому времени она перезаписывается раза 3).
Далее, никогда не анализируйте шаблоны в обработчике запросов, это отнимает слишком много времени и ресурсов. Сделайте это один раз при запуске (или по первому требованию). Подробнее см. При использовании пакета шаблонов создание динамической веб-страницы для клиента в golang занимает слишком много времени.
Далее вы можете парсить сразу несколько файлов, просто перечислите все при переходе к Template.ParseFiles()
< /a> функция (есть метод и функция).
Помните, что Template.Execute()
выполняет только один (именованный) шаблон. У вас есть 3 связанных шаблона, но только "base.html"
шаблона выполняется вашим кодом. Чтобы выполнить определенный именованный шаблон, используйте Template.ExecuteTemplate()
а>. Подробнее см. в разделе Сообщение Golang, какой шаблон выполнять первым.
Сначала вы должны определить структуру ваших шаблонов, решить, какие шаблоны включают в себя другие, и выполнить шаблон "оболочки" (используя Template.ExecuteTemplate()
). Когда вы выполняете шаблон, который вызывает/включает другой шаблон, у вас есть возможность указать, какое значение (данные) вам передать для его выполнения. Когда вы пишете {{template "something" .}}
, это означает, что вы хотите передать значение, на которое в данный момент указывает точка, для выполнения шаблона с именем "something"
. Узнайте больше об этом: конвейеры механизма шаблонов golang.
Чтобы узнать больше о ассоциации шаблонов и внутренних компонентах, прочитайте этот ответ: имя шаблона Go.
Итак, в вашем случае я бы предположил, что "base.html"
является оболочкой, внешним шаблоном, который включает "menu.html"
и "users.html"
. Таким образом, "base.html"
должен содержать строки, подобные этой:
{{template "menu.html" .}}
{{template "users.html" .}}
Вышеупомянутые строки будут вызывать и включать результаты упомянутых шаблонов, передавая на их выполнение данные, которые были переданы "base.html"
(если точка не была изменена).
Проанализируйте файлы, используя template.ParseFiles()
функцию (не метод ) как это:
var t *template.Template
func init() {
var err error
t, err = template.ParseFiles(
"public/base.html", "public/menu.html", "public/users.html")
if err != nil {
panic(err) // handle error
}
}
И выполните это в своем обработчике следующим образом:
err := t.ExecuteTemplate(w, "base.html", context)
person
icza
schedule
06.03.2017