gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:37:42 24 4
gpt4 key购买 nike

我有一个用 Golang 编写的小型网络服务器,它运行在一堆 unix 设备上。我希望在我的网络服务器提供的每个页面的页眉中显示设备名称,以便我可以知道我正在查看的是哪个设备。

网络服务器有六个网页,它们都使用嵌套的标题模板。像这样:

<body>
{{template "header"}}

header.html 文件可能是这样的:

{{define "header"}}
<h1>Device Name is: {{.}}</h1>
{{end}}

我希望设备名称(通过 os.HostName() 获得)位于 header 中 - 但我无法弄清楚如何轻松做到这一点。

我能做的是在程序开始时获取主机名,然后在每次调用 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 将其注入(inject) header 。

但是有什么方法可以在程序开始时将该 deviceName 值放入 header 模板中吗?以便从那时起它就嵌套到每个页面中?

我应该补充一点,我也在启动时解析我的 .html 文件。使用 ParseFiles。

最佳答案

os.HostName 添加为 template function .在 header 中调用该函数。

下面是解析模板时定义函数的例子:

t := template.Must(template.New("").Funcs(
template.FuncMap{"hostname": os.Hostname}).ParseFiles(fnames...))

像这样使用函数:

{{define "header"}}
<h1>Device Name is: {{hostname}}</h1>
{{end}}

Run it on the Playground .

关于html - 具有动态内容的 Golang 模板标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54643907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com