将 HTML 插入 Go 模板
使用 Go 模板时,重要的是要考虑如何插入 HTML 内容以避免意外行为。例如,插入包含 HTML 代码的字符串可能会导致不需要的字符转义,从而导致不正确的输出。
要在 Go 模板中正确处理 HTML 插入,请遵循以下准则:
通过HTML 作为 template.HTML:
不要直接传递字符串,而是将 HTML 内容包装在 template.HTML 类型中。这告诉模板引擎将内容视为原始 HTML,防止其转义字符。
示例:
<code class="go">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;</code>
避免传递字符串:
将 HTML 内容作为字符串传递可能会导致不必要的转义。例如:
<code class="go">tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}<p>{{.String}}</p>{{end}}`)) tplVars := map[string]interface{} { "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;</code>
JSON 数据:
如果您将 JSON 数据插入到模板中,则可以使用像encoding/json 这样的库对其进行编码作为字符串。然后,您可以将编码后的字符串传递给模板并使用 json 模板函数在模板中对其进行解码。
以上是如何在Go模板中插入HTML而不转义?的详细内容。更多信息请关注PHP中文网其他相关文章!