现在我正在使用Gorilla 上下文包在我的中间件和控制器中传递数据,但我想要做的是将数据直接传递给我的Pongo2模板,以便稍后在我的控制器中我不必从 Gorilla 获取数据上下文并手动将其传递给模板上下文,对于那些熟悉 express.js 的人来说,它会像
var user = {
name: "Name",
age: 0
}
response.locals = user
编辑:所以每个 pongo2 模板都需要访问一个 User 对象,现在我使用中间件从数据库中获取用户并使用 Gorilla 上下文将数据传递给我的控制器,从那里到我的每个控制器上的模板,但我想要做的是将 User 对象从我的中间件传递给模板,而不是使用 Gorilla 上下文。
func UserMiddleware(next http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
user := &User{} // user will normally be fetched from database
context.Set(req, "user", user)
next.ServeHTTP(res, req)
})
}
然后在我的请求处理程序中
func Handler(res http.ResponseWriter, req *http.Request) {
tpl, _ := pongo2.FromFile("view/template.html")
user := context.Get(req, "user").(*User)
data := pongo2.Context{
"user": user,
}
out, _ := tpl.Execute(data)
res.Write([]byte(out))
}
对于我所有的处理程序,我必须像这样将用户传递给模板,但我想从我的中间件传递它,这样我就不必在每个处理程序中都这样做。
潇潇雨雨
相关分类