在Go範本中使用請求上下文
在Go範本中,您可能會遇到需要從觸發請求中存取資訊的情況,例如判斷目前使用者是否為管理員。然而,模板缺乏對請求上下文的固有感知。
解決方案:管道
常見的方法是使用管道將必要的資料從處理程序傳遞到範本。這涉及創建一個包含相關上下文資訊的管道變量,然後在模板中存取它。例如:
type TemplateData struct {
IsUserAdmin bool
}
func handler(w http.ResponseWriter, r *http.Request) {
isUserAdmin := isAdmin(r)
data := TemplateData{IsUserAdmin: isUserAdmin}
t.Execute(w, data)
}
範本內:
{{if .IsUserAdmin}} Go to the big red nuclear button {{end}}
嵌入上下文
另一個選項是將請求上下文嵌入到自訂範本資料結構中。這允許您同時存取範本資料和上下文:
type TemplateData struct {
Data interface{}
Context *http.Request
}
模板內:
{{if .Context.IsAdmin}} Go to the big red nuclear button {{end}}
Funnel 方法
雖然 Funcs 方法可用於定義自訂函數,但不建議用於處理確定使用者權限等複雜邏輯。最好將此類任務保留在處理程序或控制器中。
最佳實踐
通常,限制模板處理顯示邏輯並避免引入業務邏輯被認為是最佳實踐或請求上下文依賴關係。然而,在某些情況下,可能需要存取特定的請求訊息,因此採用上述方法。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3