从另一个模板中获取一个 go 模板的值
get the value of a go template from inside another template
我有两个模板 T1 和 T2。我想获得 T1 的输出并在 T2 中对其进行一些额外的处理。我的问题是:
如何将 T1 的输出存储在 T2 内的变量中?这可能吗?
这是一些伪模板:
{{define "T1"}}
{{ printf "%s-%s" complex stuff }}
{{end}}
{{define "T2"}}
{{ $some_var := output_from_template "T1"}} <<<<<<<<<<<
{{ etc }}
{{end}}
不内置支持将模板结果存储在模板变量中,仅支持包含结果。
但是您可以注册具有任何您想要的复杂功能的自定义函数。您可以注册一个 GetOutput
函数,该函数将执行由其名称标识的模板,并且它可以 return 结果作为 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
函数获取要执行的模板的名称,通过将其输出定向到本地缓冲区来执行它,并且 returns 缓冲区的内容(以及可选的执行错误)。
编辑: 我发现了一个完全相同的副本:Capture or assign golang template output to variable
我有两个模板 T1 和 T2。我想获得 T1 的输出并在 T2 中对其进行一些额外的处理。我的问题是:
如何将 T1 的输出存储在 T2 内的变量中?这可能吗?
这是一些伪模板:
{{define "T1"}}
{{ printf "%s-%s" complex stuff }}
{{end}}
{{define "T2"}}
{{ $some_var := output_from_template "T1"}} <<<<<<<<<<<
{{ etc }}
{{end}}
不内置支持将模板结果存储在模板变量中,仅支持包含结果。
但是您可以注册具有任何您想要的复杂功能的自定义函数。您可以注册一个 GetOutput
函数,该函数将执行由其名称标识的模板,并且它可以 return 结果作为 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
函数获取要执行的模板的名称,通过将其输出定向到本地缓冲区来执行它,并且 returns 缓冲区的内容(以及可选的执行错误)。
编辑: 我发现了一个完全相同的副本:Capture or assign golang template output to variable