我有我的模板,这些模板最初是在应用程序启动时解析的(显然是出于这样的速度原因)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在尝试解析它时抛出错误。任何有关如何使其按预期工作的信息都将非常感谢。
1 回答
不负相思意
TA贡献1777条经验 获得超10个赞
所以我想通了,但我将这个答案留在这里,因为它似乎在任何地方都没有答案,基本上我可以定义一个冗余FuncMap来模拟我将在会话中使用的那个,然后将它们返回空白,然后我可以用FuncMap我的view函数(在问题帖子中可见)覆盖它们,如下所示:
var templates = template.New("template").Funcs(template.FuncMap{
"authenticated": func() bool {
log.Println("Was I called?")
return false
},
"username": func() string {
return ""
},
})
- 1 回答
- 0 关注
- 228 浏览
添加回答
举报
0/150
提交
取消