我无法使用以下语法/步骤将自定义函数传递给HTML模板:

t, err := template.ParseFiles("name.tpl")
if err != nil {
    return
}

err = t.Funcs(template.FuncMap{"add": add}).Execute(w, nil)
if err != nil {
    return
}

...
...
...

func add(a int8, b int8) int8 {
    return a + b
}

所需的功能是add,在编译过程中没有错误,但是在尝试呈现HTML模板时出现错误function "add" not defined。我想念什么?

附言请不要提供其他解析模板的方法,例如template.New...等。我希望使用此语法。

最佳答案

使用此功能:

func parseFiles(funcs template.FuncMap, filenames ...string) (*template.Template, error) {
    return template.New(filepath.Base(filenames[0])).Funcs(funcs).ParseFiles(filenames...)
}

这样称呼它:
t, err := parseFiles(template.FuncMap{"add": add}, "name.tpl")
if err != nil {
    return
}
err = t.Execute(w, nil)

Run it on the Go Playground

关于templates - HTML模板中的未定义函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57115847/

10-16 14:16