2 回答

TA贡献1829条经验 获得超13个赞
(1)我的Execute模板代码,似乎没有将数据传递给内容
正如人们在评论中指出的那样,您需要使用数据显式调用模板:
{{ template "content" . }}
注意零件后面的点"content"。
(2) 如果我想拥有多个具有相同布局的页面,上述方法将不起作用,因为它没有指定要加载的内容。
有几种方法可以解决这个问题。我要做的就是这个。我不在{{ define "content" }}每个模板中。相反,我将所有模板解析为一个:
tmpls, err := template.ParseGlob(tmplGlob)
然后对于每个请求,我克隆布局并将所需的模板设置为"content":
func executeTemplate(tmpls *template.Template, tmplName string, w io.Writer, data interface{}) error {
var err error
layout := tmpls.Lookup("layout.html")
if layout == nil {
return errNoLayout
}
layout, err = layout.Clone()
if err != nil {
return err
}
t := tmpls.Lookup(tmplName)
if t == nil {
return errNoTemplate
}
_, err = layout.AddParseTree("content", t.Tree)
if err != nil {
return err
}
return layout.Execute(w, data)
}
- 2 回答
- 0 关注
- 116 浏览
添加回答
举报