我有我的模板,这些模板最初是在应用程序启动时解析的(显然是出于这样的速度原因)
var templates = template.New("template")
filepath.Walk("views", func(path string, info os.FileInfo, err error) error {
if strings.HasSuffix(path, ".html") {
templates.ParseFiles(path)
}
return nil
})
log.Println("Templates Parsed")
然后我将我的 funcmaps 添加到它们自己的函数中(因为我需要请求对象,所以我可以像这样获取它们的会话数据)
func View(w http.ResponseWriter, r *http.Request, tmplN string, data interface{}) {
tmpl := templates.Funcs(template.FuncMap{
"username": func() string {
session := Sesh(r)
username := ""
if session.Values["username"] != nil {
username = session.Values["username"].(string)
}
return username
},
"authenticated": func() bool {
session := Sesh(r)
authenticated := false
if session.Values["authenticated"] != nil {
authenticated = session.Values["authenticated"].(bool)
}
return authenticated
},
})
err := tmpl.ExecuteTemplate(w, tmplN, data)
if err != nil {
log.Println("Error " + err.Error())
}
}
但似乎如果我Funcs在解析模板之前不调用它就不起作用,例如,如果我尝试在我的register模板中使用,如下所示:
{{ define "register" }}
{{ template "_header" .}}
{{ if authenticated }}
// Call FuncMap function
{{ end }}
<br/>
<br/>
<br/>
<div class="row align-center">
<div class="large-4 columns text-center">
<div id="RegistrationFormComponent"></div>
</div>
</div>
{{ template "_footer" .}}
{{ end }}
我收到“注册”不存在的错误,因为该函数authenticated在尝试解析它时抛出错误。任何有关如何使其按预期工作的信息都将非常感谢。
不负相思意
相关分类