使用text/template
包中的template.FuncMap
,您可以直接从GO模板文件中访问函数.
假设以下场景:在用户概述页面的处理程序中,调用函数GetAllUsers
并将用户对象传递给具有ExecuteTemplate
的模板:
func index(w http.ResponseWriter, r *http.Request) {
users, err := model.GetAllUsers()
if err != nil {
render50x()
return
}
data := make(map[string]interface{})
data["userList"] = users
render(w, r, data, "layout", "index")
}
这是否等同于将函数传递给模板并在那里执行?
var funcs = template.FuncMap{
"getAllUsers": model.GetAllUsers,
}
// func render
t := template.New("render").Funcs(funcs)
if err := template.Must(t.ParseFS(ViewsFS, files...)).ExecuteTemplate(w, layout, data); err != nil {
log.Println("Error executing template:", err.Error())
}
{{ range getAllUsers }}
{{ .DisplayName }}
{{ end }}
这两种方法有什么不同吗?