Код нашего приложения неэффективен: renderTemplate вызывает ParseFiles каждый раз, когда страница отображается. Лучшим подходом будет вызвать ParseFiles один раз в инициализации программы, сложить все шаблоны в один *Template. Тогда мы можем использовать метод ExecuteTemplate для визуализации конкретного шаблона.
Сначала мы создаем глобальную переменную с именем templates и инициализируем ее с ParseFiles.
var templates = template.Must(
template.ParseFiles("edit.html",
"view.html"))
Функция template.Must - это удобная оболочка, которая паникует когда передано ненулевое значение error, а в противном случае возвращает *Template без изменений. Здесь уместна паника; если шаблоны не могут быть загружены, единственное разумное, что нужно сделать, это выйти из программы.
Функция ParseFiles принимает любое количество строковых аргументов, которые идентифицируют наши файлы шаблонов и анализируют эти файлы в шаблоны, которые названы в честь базового имени файла. Если бы мы добавили больше шаблонов в нашу программу, мы бы добавили их имена к аргументам вызова ParseFiles.
Затем мы модифицируем функцию renderTemplate для вызова метода templates.ExecuteTemplate с именем соответствующего шаблона:
func renderTemplate(w http.ResponseWriter,
tmpl string, p *Page) {
err := templates.ExecuteTemplate(w, tmpl+".html", p)
if err != nil {
http.Error(w, err.Error(),
http.StatusInternalServerError)
}
}
Обратите внимание, что имя шаблона является именем файла шаблона, поэтому мы должны добавить ".html" к аргументу tmpl.
Читайте также:
- Веб-приложение на Go: использование net/http для обслуживания вики-страниц
- Веб-приложение на Go: редактирование страниц, пакет html/template
- Веб-приложение на Go: обработка несуществующих страниц, сохранение страниц

Комментариев нет:
Отправить комментарий