如何在Go中自动将数据传递给模板?

时间:2015-09-10 05:16:47

标签: go

现在我正在使用Gorilla context包来传递我的中间件和数据中的数据。控制器,但我想要做的是将数据直接传递到我的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))
}

对于我的所有处理程序,我必须将用户传递给这样的模板,但我想从我的中间件传递它,以便我不必在每个处理程序中执行此操作。

0 个答案:

没有答案