我正在尝试向模板中添加FuncMap
,但我收到以下错误:
模板:“foo”是不完整或空的 模板
在使用FuncMap
之前,模板的解析工作得很好,所以我不确定它为什么会抛出错误。
这是我的代码:
funcMap := template.FuncMap{
"IntToUSD": func(num int) string {
return decimal.New(int64(num), 2).String()
},
}
// ...
tmpl, err := template.New(t.file).Funcs(funcMap).ParseFiles(t.files()...)
if err != nil {
// ...
}
t.files()
只返回一段文件路径的字符串。
任何人都知道发生了什么事?
答案 0 :(得分:28)
确保传递给template.New
的参数是传递给ParseFiles
的列表中某个文件的基本名称。
一个选项是
files := t.files()
if len(files) > 0 {
name := path.Base(files[0])
tmpl, err := template.New(name).Funcs(funcMap).ParseFiles(files...)
由于ParseFiles创建的模板是由参数文件的基本名称命名的,因此t通常应该具有文件(基本)名称之一的名称。
答案 1 :(得分:1)
我遇到了同样的问题。我意识到
tmpl, err := template.New("").Funcs(funcMap).ParseFiles("fileName")
如果与一起使用,
也可以使用
err := tpl.ExecuteTemplate(wr, "fileName", data)
如果我使用
err := tpl.Execute(wr, data)
然后我应该在New()
中指定模板名称:
tmpl, err := template.New("fileName").Funcs(funcMap).ParseFiles("fileName")
答案 2 :(得分:0)
您也可以使用 Template.Must 方法,
templ = template.Must(template.New("fileName").Funcs(fm).ParseFiles("fileName"))