我正在构建go web应用程序.我在渲染的html页面上发现了一些异常现象.我的所有html评论都突然没有被渲染.我的猜测是因为我使用的版本(刚刚更新到更高版本),因为在我更新它之前它很好.
这是我的代码:
这是呈现的页面源:
由于这个问题,我使用无容器控制流语法编写的许多KnockoutJS代码都很疯狂,它根本不起作用.
我该怎么做才能解决这个问题?提前致谢
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 = ` {{safe ""}}Some HTML content`
输出(在Go Playground上试试):
Some HTML content
所以基本上在注册我们的safe()
函数之后,将所有HTML注释转换为调用此safe()
函数并传递原始HTML注释的模板操作.
转换这个:
对此:
{{safe ""}}
或者(无论你喜欢):
{{"" | safe}}
你很高兴去.
注意:如果HTML注释包含引号('"'
),则可以/必须像这样转义:
{{safe ""}}
注意#2:请注意,您不应该使用条件HTML注释,因为这可能会破坏上下文敏感的html/template
包转义.详情请阅读此内容.