Golang:帮助将函数注册到模板中

我试图在我的模板中添加一个函数来“人性化”(https://gowalker.org/github.com/dustin/go-humanize)输出,但似乎我做错了,因为我得到了这个错误:


恐慌:模板:dashboard.tmpl:192:未定义函数“humanizeTime”


func renderTemplate(w http.ResponseWriter, name string, data map[string]interface{}) error {

    //functions for templates

    templateFuncs := template.FuncMap{

        "humanizeTime": func(t time.Time) string {

            return humanize.Time(t)

        },

    }

    tmpl := Templates[name+".tmpl"].Funcs(templateFuncs)

    w.Header().Set("Content-Type", "text/html; charset=utf-8")


    err := tmpl.ExecuteTemplate(w, name, data)

    if err != nil {

        log.Printf("Error rendering template: %s", err.Error())

        http.Error(w, err.Error(), http.StatusInternalServerError)

        return errors.New("Error trying to render template")

    }

    return nil

}

补充:我在 init() 上定义和加载我的模板映射:


var Templates      map[string]*template.Template


if Templates == nil {

    Templates = make(map[string]*template.Template)

}

layouts, err := filepath.Glob("templates/*.tmpl")

if err != nil {

    panic(err)

}

for _, layout := range layouts {

    Templates[filepath.Base(layout)] = template.Must(template.ParseFiles(layouts...))

}

我只是将我的定义更改为:


for _, layout := range layouts {

    Templates[filepath.Base(layout)] = template.Must(template.ParseFiles(layouts...)).Funcs(templateFuncs)

}

但还没有工作,我得到了同样的错误:未定义。


请问有人可以帮我吗?谢谢。


慕斯709654
浏览 321回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go