在模板中,我该如何实现?
{{$var := template "my-template"}}
我得到"unexpected <template> in operand"
。
答案 0 :(得分:5)
没有用于获取模板执行结果的“内置”操作,但您可以通过注册执行此操作的函数来执行此操作。
您可以使用Template.Funcs()
函数注册函数,您可以使用Template.ExecuteTemplate()
执行命名模板,并且可以使用bytes.Buffer
作为目标(将模板执行结果直接导入缓冲区)
这是一个完整的例子:
var t *template.Template
func execTempl(name string) (string, error) {
buf := &bytes.Buffer{}
err := t.ExecuteTemplate(buf, name, nil)
return buf.String(), err
}
func main() {
t = template.Must(template.New("").Funcs(template.FuncMap{
"execTempl": execTempl,
}).Parse(tmpl))
if err := t.Execute(os.Stdout, nil); err != nil {
panic(err)
}
}
const tmpl = `{{define "my-template"}}my-template content{{end}}
See result:
{{$var := execTempl "my-template"}}
{{$var}}
`
输出(在Go Playground上尝试):
See result:
my-template content
"my-template"
模板由注册函数execTempl()
执行,结果以string
形式返回,存储在$var
模板变量中,然后只是添加到输出中,但如果您愿意,可以使用它传递给其他函数。