我有一个HTML模板,我执行传递map [string]字符串变量。模板使用该变量来创建我发送给客户端的HTML输出。
除了生成HTML之外,我想使用相同的模板生成一些返回到主程序的值,因此我可以使用相同的文件在外部放置一些逻辑。
据我所知,无法修改我传递给Execute的变量(类似{{.output = "value"}}
)。
那么如何从模板执行中获取多个输出值?
答案 0 :(得分:1)
您实际上并不需要传递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()
}
您始终可以将 FuncMap
传递给模板,这是一个非常简单的示例:
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()
}