将HTML插入golang模板

时间:2017-01-30 07:49:35

标签: html json templates go escaping

我在golang中有一个模板,我有一个看起来像这样的字符串:

<some_html> {{ .SomeOtherHTML }} </some_html>

我希望输出是这样的:

<some_html> <the_other_html/> </some_html>

但我却看到这样的事情:

<some_html> &lt;the_other_html/&lt; </some_html>

我也试图插入一些JSON,但golang正在逃避角色,并在他们不应该的地方添加"之类的东西。

如果不发生这种情况,如何在golang中插入HTML模板?

1 个答案:

答案 0 :(得分:7)

您应该将变量作为template.HTML传递而不是string

tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}{{.String}}{{end}}`))
tplVars := map[string]interface{} {
    "Html": template.HTML("<p>Paragraph</p>"),
    "String": "<p>Paragraph</p>",
}
tpl.ExecuteTemplate(os.Stdout, "T", tplVars)

//OUTPUT: <p>Paragraph</p>&lt;p&gt;Paragraph&lt;/p&gt;

https://play.golang.org/p/QKKpQJ7gIs

正如您所看到的,我们作为template.HTML传递的变量未转义,但作为string传递的变量是。