定义顶级go模板

时间:2013-09-22 17:13:48

标签: go template-engine

假设我有两个文本文件(去模板):

child.tmpl

TEXT1 
Hello {{ . }}

top.tmpl

TEXT2
{{ template "child.tmpl" "argument"}}

child.tmpl模板嵌套在top.tmpl

解析它们的典型程序是:

package main

import (
    "os"
    "text/template"
)

func main() {
    t := template.Must(template.ParseFiles("child.tmpl", "top.tmpl")
    t.ExecuteTemplate(os.Stdout, "top.tmpl", nil)
}

是否有任何方法使用{{ . }}表示法将模板作为参数传递给顶级模板? 像{{ template {{.}} "argument" }}

这样的东西
  • 更一般地说,定义布局模板的最佳方法是什么,以便我可以像使用多个子模板的顶级模板一样使用它?

1 个答案:

答案 0 :(得分:2)

有两种方法可以解决您的问题:

第一个涉及编写您自己的模板包含函数,并通过template.FuncMap将您的模板注册为template.Funcs

另一种方法是在模板中使用{{define xxx}}块。然后,您可以有两个不同的文件来定义相同的模板:

  • file1.html:{{define body}}...{{end}}
  • file2.html:{{define body}}...{{end}}

根据您的需要解析正确的文件,并在模板中执行{{template body "argument"}}

在我看来,第一种选择更灵活。