我有几个 go 模板。下面的例子过于简单,但它正确地表达了我的想法。例如,我有
{{ define "div-block" }}
<div style="display:block">
.....
</div>
{{ end }}
现在我想在使用 div-block
时转移任何其他模板,这样我就可以在 div 中放置任何东西。例如:
{{ template "div-block" . }}
{{ template "header" }}
{{ end }}
{{ template "div-block" . }}
<ul>
<li>1</li>
</ul>
{{ end }}
“标题”是其他模板。
使用 go 模板执行此操作的正确方法是什么?是否可以使用自定义功能来做到这一点?是否可以在 go 模板中制作自定义 actions
? ( Action 可以有 end
语句,因此也有主体,而函数则没有)
最佳答案
你可以在 go 模板中使用嵌套模板。
divBlock := `<div>Hello div
{{block "header" .}} {{.}} {{end}}
</div>`
header := `<header>Hello Header</header>`
divTempl, err := template.New("master").Parse(divBlock)
if err != nil {
log.Fatal(err)
}
if err := divTempl.Execute(os.Stdout, header); err != nil {
log.Fatal(err)
}
Playground 链接:https://play.golang.org/p/K36l3bn5753
或者
您可以使用 if 语句。检查是否有一些模板,然后追加,否则为空。
const (
divBlock = `<div style="display:block">
.....
{{if "injectedTmpl"}}{{.}}{{end}}
</div>`
)
injectedTmpl := `<header>Hello Header</header>`
divTmpl, err := template.New("div").Parse(divBlock)
if err != nil {
log.Fatal(err)
}
if err := divTmpl.Execute(os.Stdout, injectedTmpl); err != nil {
log.Fatal(err)
}
Playground 链接:https://play.golang.org/p/pZaqXtCHHAL
关于go template - 嵌套模板化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48524388/