1 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
只是一個(gè)準(zhǔn)系統(tǒng)解決方案如下:
package main
import (
"fmt"
"os"
"text/template"
)
func main() {
//read in one go the header, footer and all your other tmpls.
//append to that slice every time the relevant content that you want rendered.
alltmpls := []string{"./layouts/header.tmpl", "./layouts/footer.tmpl", "./users/index.tmpl"}
templates, err := template.ParseFiles(alltmpls...)
t := templates.Lookup("header.tmpl")
t.ExecuteTemplate(os.Stdout, "header", nil)
t = templates.Lookup("index.tmpl")
t.ExecuteTemplate(os.Stdout, "index", nil)
t = templates.Lookup("footer.tmpl")
t.ExecuteTemplate(os.Stdout, "footer", nil)
}
實(shí)際上,您可能需要一個(gè)返回適當(dāng)文件片段的函數(shù)來(lái)填充 alltmpls 變量。它應(yīng)該掃描您的目錄并從那里獲取所有文件以傳遞給 ParseFiles(),然后繼續(xù)為每個(gè)模板調(diào)用 Lookup 和 ExecuteTemplate 步驟。
進(jìn)一步考慮這個(gè)想法,我將創(chuàng)建一個(gè)新的類型,它將嵌入一個(gè)模板(或模板的一部分),由頁(yè)眉和頁(yè)腳注釋。
type hftemplate struct {
template.Template
header, footer *template.Template
}
func (h *hftemplate) ExecuteTemplate(wr io.Writer, name string, data interface{}) error {
h.header.ExecuteTemplate(wr, "header", nil)
err := h.ExecuteTemplate(wr, name, data)
h.footer.ExecuteTemplate(wr, "footer", nil)
return err
}
當(dāng)然,您可以將該結(jié)構(gòu)嵌入到 []Template 的完全成熟的字段中,以在頁(yè)眉和頁(yè)腳之間執(zhí)行多個(gè) ExecuteTemplates。
- 1 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)