Код нашего приложения неэффективен: 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: обработка несуществующих страниц, сохранение страниц
Комментариев нет:
Отправить комментарий