Несколько файлов с использованием template.ParseFiles в golang
Например, у меня есть
package main
import "html/template"
import "net/http"
func handler(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("header.html", "footer.html")
t.Execute(w, map[string] string {"Title": "My title", "Body": "Hi this is my body"})
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
В header.html:
Title is {{.Title}}
В footer.html:
Body is {{.Body}}
Когда вы перейдете к http://localhost:8080/
, я вижу только "Title is My title", а не второй файл footer.html. Как загрузить несколько файлов с шаблоном. ParseFiles? Какой самый эффективный способ сделать это?
Спасибо заранее.
Ответы
Ответ 1
В качестве основного шаблона используется только первый файл. Другие файлы шаблонов должны быть включены из первого так:
Title is {{.Title}}
{{template "footer.html" .}}
Точка после "footer.html"
передает данные от Execute
до шаблона нижнего колонтитула - переданное значение становится .
в включенном шаблоне.
Ответ 2
Существует небольшой недостаток в методе user634175: {{template "footer.html" .}}
в первом шаблоне должен быть жестко закодирован, что затрудняет изменение footer.html в нижнем колонтитуле.
И вот небольшое улучшение.
header.html:
Title is {{.Title}}
{{template "footer" .}}
footer.html:
{{define "footer"}}Body is {{.Body}}{{end}}
Так что footer.html можно изменить на любой файл, который определяет "нижний колонтитул", чтобы сделать разные страницы