Go html template 自定义函数
func GeoListGet(w http.ResponseWriter, r *http.Request) {
tpl := template.New("main_parent.html")
selfunc := make(template.FuncMap)
selfunc["calNumber"] = CalNumbers
tpl = tpl.Funcs(selfunc)
var err error
tpl, err = tpl.ParseFiles(fmt.Sprintf("%vparent/main_parent.html", conf.TmpPath), fmt.Sprintf("%vgeo/index.html", conf.TmpPath))
if err != nil {
log.Println(err)
return
}
ret, err := mysql.GetTargetList()
if err != nil {
log.Println(err)
return
}
dataT := struct {
ActiveMenu string
ActiveSub string
TargetList []datatype.XcTargetInfo
}{
ActiveMenu: "Targeting Manager",
ActiveSub: "Targeting & Bid List",
TargetList: ret,
}
if err := tpl.Execute(w, dataT); err != nil {
log.Println(err)
}
}
func CalNumbers(l []string) string {
return fmt.Sprintf("%v", len(l))
}
需要注意的是New的Name需要和ParseFiles中第一个Template的文件名一致,否则会报 template incompelete错误。
其次,函数的注入需要在ParseFiles之前