从另一个模板中获取go模板的值
我有两个模板T1和T2。我想得到T1的输出,并在T2内部对其进行一些额外的处理。我的问题是: 如何将T1的输出存储在T2内的变量中?这可能吗 下面是一些伪模板:从另一个模板中获取go模板的值,go,go-templates,Go,Go Templates,我有两个模板T1和T2。我想得到T1的输出,并在T2内部对其进行一些额外的处理。我的问题是: 如何将T1的输出存储在T2内的变量中?这可能吗 下面是一些伪模板: {{define "T1"}} {{ printf "%s-%s" complex stuff }} {{end}} {{define "T2"}} {{ $some_var := output_from_template "T1"}} <<<<<<<<<<&
{{define "T1"}}
{{ printf "%s-%s" complex stuff }}
{{end}}
{{define "T2"}}
{{ $some_var := output_from_template "T1"}} <<<<<<<<<<<
{{ etc }}
{{end}}
对于在模板变量中存储模板的结果,没有内置的支持,只支持包含结果 但是,您可以将自定义函数注册到您想要的任何复杂功能中。您可以注册一个GetOutput函数,该函数将执行由其名称标识的模板,它可以将结果作为字符串返回,您可以将其存储在模板变量中 执行此操作的示例:
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}}`
将在以下服务器上尝试输出:
T1模板只输出复杂的内容,T2模板获得T1的输出,并将静态文本和T1的结果连接起来
registered GetOutput函数获取要执行的模板的名称,通过将其输出定向到本地缓冲区来执行该模板,并返回缓冲区的内容及其执行的可选错误
编辑:我发现了一个完全相同的副本:@Marc:这不是一个副本。我是专门询问任务的。看一看这条线路,所有这些都很公平,但是@icza找到了一条:为什么不直接从T2调用T1呢?请参阅template action@mh cbon:在打印结果之前,希望将结果存储在内存中的原因有很多。就我个人而言,我需要将它传递给一些无法使用管道的正则表达式函数。@Marc:cool beans。请随时将其标记为副本。我喜欢保留副本,因为这样更容易找到东西。谢谢你的意见
even-more-complex-stuff