我想将包含所有管理员/系统值的结构传递给我的视图,该结构在Go中使用html / template进行解析。例如,我想默认情况下将.IsAuthenticated和.IsAdmin放到我的视图中,而不显式传递给处理程序。
默认情况下是否可以使这些值始终可用,而不通过处理程序?我想通过处理程序传递表单值和其他用户生成的内容。
答案 0 :(得分:2)
如果应用程序没有将值传递给模板,模板就无法访问admin / system结构。传递值的便捷方法是通过每种视图类型中的匿名字段。这是一个例子:
假设AdminStuff
是包含管理和系统数据的结构,而getAdminSystemStuff(*http.Request)
是一个从请求中获取指向结构的指针的函数,请定义视图数据,如下所示:
func myHandler(w http.Response, r *http.Request) {
var data = struct {
*AdminSystemStuff
AFieldSpecificToThisView string
AnotherViewField string
}{
getAdminSystemStuff(r),
"hello",
"world"
}
err := t.Execute(w, &data) // t is the compiled template.
if err != nil {
// handle error
}
}
您可以在以下模板中使用它:
<html>
<body>
Here are some fields: {{.AFieldSpecificToThisView}} {{.AnotherViewField}}
{{if .IsAuthenticated}}The user is authenticated{{end}}
</body>
</html>