簡體   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