模板引擎通过将数据和模板组合在一起生成最终的HTML,而处理器则负责调用模板引擎并将引擎生成的HTML返回给客户端。
处理器调用Go模板引擎的流程:
处理器首先调用模板引擎,接着以模板文件列表的方式向模板引擎传入一个或多个模板,然后再传入模板需要用到的动态数据;模板引擎在接收到这些参数之后会生成出相应的HTML,并将这些文件写入到ResponseWriter里面,然后由ResponseWriter将HTTP响应返回给客户端。
对模板进行语法分析:
ParseFiles函数在执行完毕之后将返回一个Template类型的已分析模板和一个错误作为结果
<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title>Go Web Programming</title></head><body>{{ .}}</body></html>
package mainimport (\"net/http\"\"html/template\")func process(w http.ResponseWriter, r *http.Request) {t, _ := template.ParseFiles(\"tmpl.html\")调用Execute方法,将数据应用(apply)到模板里面——在这个例子中,数据就是字符串\"Hello World!\":t.Execute(w, \"Hello World!\")}func main() {server := http.Server{Addr:\"127.0.0.1:8080\",}
这相当于创建一个新模板,然后调用它的ParseFiles方法:
t := template.New(\"tmpl.html\")t, _ := t.ParseFiles(\"tmpl.html\")
ParseGlob会对匹配给定模式的所有文件进行语法分析
t, _ := template.ParseFiles(\"tmpl.html\")和语句t, _ := template.ParseGlob(\"*.html\")
程序也可以直接对字符串形式的模板进行语法分析
tmpl := `<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title>Go Web Programming</title></head><body>{{ .}}</body></html>t, _ = t.Parse(tmpl)t.Execute(w, \"Hello World!\")
执行模板
在只有一个模板时调用模板的Execute方法,
t, _ := template.ParseFiles(\"tmpl.html\")t.Execute(w, \"Hello World!\")
但如果模板不止一个,那么当对模板集合调用Execute方法的时候,Execute方法只会执行模板集合中的第一个模板。如果想要执行的不是模板集合中的第一个模板而是其他模板,就需要使用Execute Template方法。
t, _ := template.ParseFiles(\"t1.html\", \"t2.html\")t.ExecuteTemplate(w, \"t2.html\", \"Hello World!\")
Go也提供了另外一种机制,专门用于处理分析模板时出现的错误:
t := template.Must(template.ParseFiles(\"tmpl.html\"))