I'm trying to add a FuncMap
to my templates, but I'm receiving the following error:
template: "foo" is an incomplete or empty template
The parsing of templates worked just fine before I used the FuncMap
, so I'm not sure why it's throwing an error now.
Here is my code:
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()
just returns a slice of strings that are file paths.
Anyone know what's up?
Make sure the argument you pass to template.New
is the base name of one of the files in the list you pass to ParseFiles
.
One option is
files := t.files()
if len(files) > 0 {
name := path.Base(files[0])
tmpl, err := template.New(name).Funcs(funcMap).ParseFiles(files...)
ParseFiles documentation:
Since the templates created by ParseFiles are named by the base names of the argument files, t should usually have the name of one of the (base) names of the files.
I was having the same problem. I realized that
tmpl, err := template.New("").Funcs(funcMap).ParseFiles("fileName")
also works if you use it with
err := tpl.ExecuteTemplate(wr, "fileName", data)
If I use
err := tpl.Execute(wr, data)
then I should specify the template name in New()
:
tmpl, err := template.New("fileName").Funcs(funcMap).ParseFiles("fileName")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With