为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
芜湖不芜 2023-06-05 18:22:59
我有一个用 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 文件。使用解析文件。
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

添加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 上运行它


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信