現在我正在使用Gorilla context包在我的中間件&控制器中傳遞數據,但我想要做的是將數據直接傳遞給我的Pongo2模板,以便稍後在我的控制器中,我不必從數據庫中獲取數據大猩猩上下文並手動將其傳遞給模板背景下,對於那些你熟悉express.js它會像如何在Go中自動傳遞數據到模板?
var user = {
name: "Name",
age: 0
}
response.locals = user
編輯:所以每次pongo2模板需要訪問用戶對象,現在我獲取用戶從數據庫使用中間件和使用Gorilla上下文將數據傳遞到我的控制器,從那裏到每個控制器上的模板,但我想要做的是將User對象從我的中間件傳遞到模板o f使用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))
}
對於我所有的處理程序我有用戶傳遞到模板這樣的,但我想從我的中間件通過它,這樣我不我不得不在每個處理程序中執行它。
你正在使用兩個包Gorilla和Pongo,當然你需要編寫一些代碼將它們粘合在一起。或者請提出更具體的問題 –
我已更新問題 – zola
不得不從上下文中拉出用戶並將其傳遞給模板並不奇怪 - 這是處理程序中的4行代碼?真的沒有辦法「簡化」這一點。 – elithrar