当前位置:  开发笔记 > 编程语言 > 正文

Go - 不呈现HTML注释

如何解决《Go-不呈现HTML注释》经验,为你挑选了1个好方法。

我正在构建go web应用程序.我在渲染的html页面上发现了一些异常现象.我的所有html评论都突然没有被渲染.我的猜测是因为我使用的版本(刚刚更新到更高版本),因为在我更新它之前它很好.

这是我的代码:



这是呈现的页面源:

在此输入图像描述

由于这个问题,我使用无容器控制流语法编写的许多KnockoutJS代码都很疯狂,它根本不起作用.

我该怎么做才能解决这个问题?提前致谢



1> icza..:

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包转义.详情请阅读此内容.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有