[英]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}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.