Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

error: template: "..." is an incomplete or empty template

Tags:

go

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?

like image 311
Lansana Camara Avatar asked Mar 01 '18 05:03

Lansana Camara


2 Answers

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.

like image 117
jrefior Avatar answered Nov 11 '22 15:11

jrefior


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")
like image 24
iDuran Avatar answered Nov 11 '22 15:11

iDuran