没有内置支持将模板结果存储在模板变量中,仅用于包含结果。
但是,您可以使用所需的任何复杂功能注册自定义功能。您可以注册一个
GetOutput函数,该函数将执行由其名称标识的模板,并且可以将结果返回为
string,可以将其存储在模板变量中。
这样做的例子:
func main() { t := template.New("") t = template.Must(t.Funcs(template.FuncMap{ "GetOutput": func(name string) (string, error) { buf := &bytes.Buffer{} err := t.ExecuteTemplate(buf, name, nil) return buf.String(), err }, }).Parse(src)) if err := t.ExecuteTemplate(os.Stdout, "T2", nil); err != nil { panic(err) }}const src = `{{define "T1"}}{{ printf "%s-%s" "complex" "stuff" }}{{end}}{{define "T2"}} {{ $t1Out := (GetOutput "T1")}} {{ printf "%s-%s" "even-more" $t1Out }}{{end}}`输出将是(在Go Playground上尝试):
even-more-complex-stuff
该
"T1"模板简单地输出
"complex-stuff",和
"T2"模板得到的输出
"T1",并连接静态文本
"even-more-"和结果
"T1"。
已注册的
GetOutput函数获取要执行的模板的名称,将其输出定向到本地缓冲区以执行该模板,然后返回缓冲区的内容(以及其执行的可选错误)。



