2 回答
TA贡献1780条经验 获得超3个赞
包中有一个特殊类型html/template:template.HTML. 呈现模板时,模板中此类型的值不会被转义。
因此,您可以“标记”您的 HTML 注释template.HTML,以便在执行模板期间它们不会被转义或省略。
一种方法是为您的模板注册一个自定义函数,该函数可以从您的模板中调用,该函数接受一个string参数并将其返回为template.HTML. 您可以将所有 HTML 注释“传递”给此函数,因此,您的 HTML 注释将保留在输出中。
看这个例子:
func main() {
t := template.Must(template.New("").Funcs(template.FuncMap{
"safe": func(s string) template.HTML { return template.HTML(s) },
}).Parse(src))
t.Execute(os.Stdout, nil)
}
const src = `<html><body>
{{safe "<!-- This is a comment -->"}}
<div>Some <b>HTML</b> content</div>
</body></html>`
输出(在Go Playground上试试):
<html><body>
<!-- This is a comment -->
<div>Some <b>HTML</b> content</div>
</body></html>
所以基本上在注册我们的safe()函数后,将所有 HTML 注释转换为调用此safe()函数并传递原始 HTML 注释的模板操作。
转换这个:
<!-- Some HTML comment -->
对此:
{{safe "<!-- Some HTML comment -->"}}
或者(无论你喜欢哪个):
{{"<!-- Some HTML comment -->" | safe}}
你很高兴去。
注意:如果您的 HTML 注释包含引号 ( '"'),您可以/必须像这样转义它:
{{safe "<!-- Some \"HTML\" comment -->"}}
注意#2:请注意,您不应该使用条件 HTML 注释,因为这可能会破坏html/template包的上下文敏感转义。
TA贡献1818条经验 获得超3个赞
您可以使用和(https://golang.org/pkg/text/template/#hdr-Functions)等内置函数text/template
代替html/template
并手动执行所有转义。请注意,这很容易出错。html
js
- 2 回答
- 0 关注
- 197 浏览
添加回答
举报