去模板 - 嵌套模板

时间:2018-01-30 14:56:35

标签: go go-templates

我有几个去模板。以下示例过于简单,但它正确地说明了我的想法。例如,我有

{{ define "div-block" }}
   <div style="display:block">
         .....
   </div>
{{ end }}

现在我想在使用它时转移div-block内的任何其他模板,以便我可以在div中放置任何内容。 E.g:

{{ template "div-block" . }}
    {{ template "header" }}
{{ end }}

{{ template "div-block" . }}
    <ul>
       <li>1</li>
    </ul>
{{ end }}

其中&#34;标题&#34;是其他一些模板。

使用go模板执行此操作的正确方法是什么?是否可以使用自定义功能?是否可以在go模板中制作自定义actions? (操作可以有end语句,因此可以有正文,而函数则不是)

2 个答案:

答案 0 :(得分:0)

您可以在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)
}

Go-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)
}

Go-playground链接:https://play.golang.org/p/pZaqXtCHHAL

答案 1 :(得分:0)

在外部定义另一个模板,并在div-block模板内部使用