为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
呼如林 2021-12-06 14:57:42
我有我的模板,这些模板最初是在应用程序启动时解析的(显然是出于这样的速度原因)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 ""

    },

})


查看完整回答
反对 回复 2021-12-06
  • 1 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信