在html模板中找不到自定义模板函数

时间:2018-12-29 17:41:47

标签: html go

我以这种方式呈现模板:

  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}}

为什么不起作用以及如何使其起作用?

1 个答案:

答案 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)))