dpfln86244
2019-07-19 15:48
浏览 232
已采纳

HTML模板中的未定义函数

I can't pass a custom function to the HTML template with the following syntax/steps:

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
}

Needed function is add, there are no errors during the compilation, but while trying to render HTML template I get an error function "add" not defined. What am I missing?

P.S. please don't offer other ways of parsing template, with something like template.New... and so on. I wish to use THIS syntax.

图片转代码服务由CSDN问答提供 功能建议

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

  t,err:= template.ParseFiles(“ name.tpl”)
if err!= nil {
 return 
} 
 
err = t.Funcs(template.FuncMap {  “ add”:add})。执行(w,nil)
if err!= nil {
 return 
} 
 
 ... 
 ... 
 ... 
 
func add(  a int8,b int8)int8 {
返回a + b 
} 
   
 
 

需要的功能是 add ,没有错误 在编译期间,但是在尝试呈现HTML模板时,出现错误未定义函数“添加” 。 我想念什么?

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douliaodan2738 2019-07-20 14:08
    已采纳

    Use this function:

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

    Call it like this:

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

    Run it on the Go Playground.

    点赞 打赏 评论

相关推荐 更多相似问题