1 回答

TA貢獻1875條經驗 獲得超3個贊
不是http.ResponseWriter在調用 時直接寫入 ,而是寫入ExecuteTemplate字節緩沖區,然后通過調用準備調用將其發送到下一個模板template.HTML。
var b bytes.Buffer
var templates = template.Must(template.ParseGlob("templates/*.html"))
err := templates.ExecuteTemplate(b, templ_1, p)
if err != nil { //handle err }
err := templates.ExecuteTemplate(w, templ_2, template.HTML(b.String()))
if err != nil { //handle err }
如果您要使用未知數量的模板,您可以使用字符串捕獲中間步驟:
var strtmp string
err := templates.ExecuteTemplate(b, templ_1, p)
if err != nil { //handle err }
strtemp = b.String() //store the output
b.Reset() //prep buffer for next template's output
err := templates.ExecuteTemplate(b, templ_2, template.HTML(strtmp))
if err != nil { //handle err }
//... until all templates are applied
b.WriteTo(w) //Send the final output to the ResponseWriter
編輯:正如@Zhuharev 指出的,如果視圖和編輯模板的組成是固定的,它們都可以引用 base 而不是 base 試圖提供對視圖或編輯的引用:
{{define "viewContent"}}
{{template "templates/base.html" .}}
...Current view.html template...
{{end}}
{{define "editContent"}}
{{template "templates/base.html" .}}
...Current edit.html template...
{{end}}
- 1 回答
- 0 關注
- 190 瀏覽
添加回答
舉報