gpt4 book ai didi

go - 如何将 FuncMaps 添加到 golang 中已解析的模板

转载 作者:IT王子 更新时间:2023-10-29 02:15:11 24 4
gpt4 key购买 nike

我有我的模板,这些模板最初是在应用程序启动时解析的(显然是出于这样的速度原因)

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com