将值传递给处理程序之外的html / template

时间:2016-12-20 19:06:35

标签: go

我想将包含所有管理员/系统值的结构传递给我的视图,该结构在Go中使用html / template进行解析。例如,我想默认情况下将.IsAuthenticated和.IsAdmin放到我的视图中,而不显式传递给处理程序。

默认情况下是否可以使这些值始终可用,而不通过处理程序?我想通过处理程序传递表单值和其他用户生成的内容。

1 个答案:

答案 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>