例如,我有
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/
时,我只看到“标题是我的标题”,而不是第二个文件footer.html。如何使用template.ParseFiles加载多个文件?什么是最有效的方法?
提前致谢。
答案 0 :(得分:26)
仅将第一个文件用作主模板。其他模板文件需要包含在第一个模板中,如下所示:
Title is {{.Title}}
{{template "footer.html" .}}
"footer.html"
将数据从Execute
传递到页脚模板后的点 - 在包含的模板中传递的值变为.
。
答案 1 :(得分:19)
user634175的方法有一点缺点:第一个模板中的{{template "footer.html" .}}
必须是硬编码的,这使得很难将footer.html更改为另一个页脚。
这里有一点改进。
header.html中:
Title is {{.Title}}
{{template "footer" .}}
footer.html:
{{define "footer"}}Body is {{.Body}}{{end}}
这样footer.html可以更改为定义“页脚”的任何文件,以制作不同的页面