作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有我的模板,这些模板最初是在应用程序启动时解析的(显然是出于这样的速度原因)
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")
然后我将我的 funcmap 添加到它们自己的函数中(因为我需要请求对象,所以我可以像这样获取它们的 session 数据)
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 }}
我收到“register”不存在的错误,因为 authenticated
函数在尝试解析它时抛出错误。非常感谢任何有关如何使它按预期工作的信息。
最佳答案
所以我想通了,但我会把这个答案留在这里,因为它似乎在任何地方都没有答案,基本上我可以定义一个冗余的 FuncMap
来模仿我将与 session ,然后将它们返回空白,然后我可以使用 view
函数(在问题帖子中可见)中的 FuncMap
覆盖它们,如下所示:
var templates = template.New("template").Funcs(template.FuncMap{
"authenticated": func() bool {
log.Println("Was I called?")
return false
},
"username": func() string {
return ""
},
})
关于go - 如何将 FuncMaps 添加到 golang 中已解析的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34523745/
我是一名优秀的程序员,十分优秀!