从模板执行中获取值

时间:2015-07-11 17:31:18

标签: templates go

我有一个HTML模板,我执行传递map [string]字符串变量。模板使用该变量来创建我发送给客户端的HTML输出。

除了生成HTML之外,我想使用相同的模板生成一些返回到主程序的值,因此我可以使用相同的文件在外部放置一些逻辑。

据我所知,无法修改我传递给Execute的变量(类似{{.output = "value"}})。

那么如何从模板执行中获取多个输出值?

1 个答案:

答案 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()
}

playground

您始终可以将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()
}

playground