It noticed a weird thing with Go templates when I try to use Funcs
and FuncMap
. The following code works as expected:
buffer := bytes.N
Sonia's answer is technically correct but left me even more confused. Here's how I eventually got it working:
t, err := template.New("_base.html").Funcs(funcs).ParseFiles("../view/_base.html", "../view/home.html")
if err != nil {
fmt.Fprint(w, "Error:", err)
fmt.Println("Error:", err)
return
}
err = t.Execute(w, data)
if err != nil {
fmt.Fprint(w, "Error:", err)
fmt.Println("Error:", err)
}
The name of the template is the bare filename of the template, not the complete path. Execute
will execute the default template provided it's named to match, so there's no need to use ExecuteTemplate
.
In this case, _base.html
file is the outermost container, eg:
{{ template "title" }}
{{ template "content" }}
while home.html
defines the specific parts:
{{ define "title" }}Home{{ end }}
{{ define "content" }}
Stuff
{{ end }}