我以这种方式呈现模板:
func renderTemplate(...........) {
rt := template.Must(template.ParseFiles(
fmt.Sprintf("%s/%s", templatesPath, baseLayoutPath),
fmt.Sprintf("%s/%s", templatesPath, tplName)))
err := rt.ExecuteTemplate(w, "base", nil)
//[................]
}
我想在其中注册一个自定义函数:
func myTest1(string s) string {
return "hello: " + s
}
func renderTemplate(...........) {
rt := template.Must(template.ParseFiles(
fmt.Sprintf("%s/%s", templatesPath, baseLayoutPath),
fmt.Sprintf("%s/%s", templatesPath, tplName))).Funcs(template.FuncMap{"test1": myTest1})
这不起作用:“ test1”未定义”
// html template:
{{range .items}}
{{.Field1 | test1}}
为什么不起作用以及如何使其起作用?
答案 0 :(得分:0)
在解析模板之前添加模板功能。
从html/template docs for Funcs():
Funcs将参数映射的元素添加到模板的功能映射。必须在解析模板之前调用它。
funcMap := template.FuncMap{"test1":myTest1}
rt := template.Must(template.New("name").Funcs(funcMap).ParseFiles(
fmt.Sprintf("%s/%s", templatesPath, baseLayoutPath),
fmt.Sprintf("%s/%s", templatesPath, tplName)))