繁体   English   中英

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

[英]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}}

在Playground上运行它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM