我有一个用Golang编写的小型网络服务器,该服务器运行在一堆unix设备上。我想在我的网络服务器提供的每个页面的页眉中找到设备的名称,以便我可以知道要查看的设备。
该网络服务器有六个网页,它们都使用嵌套的标头模板。像这样:
<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。
答案 0 :(得分:3)
将os.HostName
添加为template function。在标题中调用该函数。
下面是在解析模板时定义函数的示例:
t := template.Must(template.New("").Funcs(
template.FuncMap{"hostname": os.Hostname}).ParseFiles(fnames...))
使用如下功能:
{{define "header"}}
<h1>Device Name is: {{hostname}}</h1>
{{end}}