Templates 从模板执行中获取值
我有一个传递map[string]字符串变量的HTML模板。模板使用变量创建发送给客户端的HTML输出 除了生成HTML,我还想使用完全相同的模板生成一些返回到主程序的值,这样我就可以使用相同的文件在外部放置一些逻辑 据我所知,不可能修改传递给执行的变量(类似于Templates 从模板执行中获取值,templates,go,Templates,Go,我有一个传递map[string]字符串变量的HTML模板。模板使用变量创建发送给客户端的HTML输出 除了生成HTML,我还想使用完全相同的模板生成一些返回到主程序的值,这样我就可以使用相同的文件在外部放置一些逻辑 据我所知,不可能修改传递给执行的变量(类似于{{.output=“value”}}) 那么,如何从模板执行中获得多个输出值呢 实际上不需要传递funcmap,只需传递结构 var tmpl = template.Must(template.New("test").Parse(`Be
{{.output=“value”}}
)
那么,如何从模板执行中获得多个输出值呢 实际上不需要传递funcmap,只需传递结构
var tmpl = template.Must(template.New("test").Parse(`Before: {{.Data}}{{.Set "YY"}}, after: {{.Data}}`))
func main() {
c := &CustomData{"XX"}
tmpl.Execute(os.Stdout, c)
fmt.Println()
}
您始终可以将a传递给模板,下面是一个非常简单的示例:
在主程序中生成所需的值,然后将其传递给模板可能会更容易,而不是试图在模板中生成值并将其返回给调用者……是的,这会更容易,但在这种情况下,每当我想更改行为时,我都必须修改程序并编译它。通过这种方式,它可以由知道如何创建模板但不知道如何在Go中编程的其他人在外部完成。
const tmpl = `Before: {{.Data}}{{.Set "YY"}}, after: {{.Data}}`
type CustomData struct {
Data string
}
func (c *CustomData) Set(d string) string { // it has to return anything
c.Data = d
return ""
}
func main() {
c := &CustomData{"XX"}
funcMap := template.FuncMap{
"Set": c.Set,
}
t, _ := template.New("test").Funcs(funcMap).Parse(tmpl) // don't ignore errors in real code
t.Execute(os.Stdout, c)
fmt.Println()
}