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 关注
- 153 浏览
添加回答
举报