[英]Golang Templates Header with Dynamic Content
我有一个用Golang编写的小型网络服务器,该服务器运行在一堆unix设备上。 我想在我的网络服务器提供的每个页面的页眉中找到设备的名称,以便可以告诉我正在查看的设备。
Web服务器有六个网页,它们都使用嵌套的标题模板。 像这样:
<body>
{{template "header"}}
而且header.html文件可能类似于:
{{define "header"}}
<h1>Device Name is: {{.}}</h1>
{{end}}
我希望设备的名称(通过os.HostName()获得)位于标头中,但我不知道如何轻松地做到这一点。
我所能做的就是在程序开始时获取主机名,然后在每次我调用ExecuteTemplate时将其传递回HTML。 就像我说的,大约有6页,所以我必须在6个处理程序中通过ExecuteTemplate在我的处理程序函数中将此名称传递回来。 像这样:
func XYZHandler(w http.ResponseWriter, r *http.Request) {
type returnInfo struct {
Name string
}
XYZReturnInfo := returnInfo{Name: deviceName} // deviceName obtained at start of program
tmpl.ExecuteTemplate(w, "XYZ.html", returnInfo )
}
然后HTML页面使用.Name
将其注入到标题中。
但是,是否有某种方法可以在程序启动时将那个deviceName值放入标头模板中? 这样从那以后它就嵌套在每个页面中了?
我还应该添加在启动时也解析我的.html文件。 使用ParseFiles。
添加os.HostName
作为模板函数 。 在标题中调用该函数。
这是解析模板时定义函数的示例:
t := template.Must(template.New("").Funcs(
template.FuncMap{"hostname": os.Hostname}).ParseFiles(fnames...))
使用如下函数:
{{define "header"}}
<h1>Device Name is: {{hostname}}</h1>
{{end}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.