错误:模板:“...”是一个不完整或空的模板

时间:2018-03-01 05:42:35

标签: go

我正在尝试向模板中添加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()只返回一段文件路径的字符串。

任何人都知道发生了什么事?

3 个答案:

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

  

由于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"))