猿问

具有动态内容的 Golang 模板标题

我有一个用 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 文件。使用解析文件。


芜湖不芜
浏览 97回答 1
1回答

Qyouu

添加os.HostName为模板函数。在标头中调用该函数。这是在解析模板时定义函数的示例:t := template.Must(template.New("").Funcs(     template.FuncMap{"hostname": os.Hostname}).ParseFiles(fnames...))使用这样的功能:{{define "header"}}     <h1>Device Name is: {{hostname}}</h1> {{end}}在 Playground 上运行它。
随时随地看视频慕课网APP

相关分类

Go
我要回答