首页  >  文章  >  后端开发  >  为什么 Go 模板中不显示 HTML 注释?如何修复?

为什么 Go 模板中不显示 HTML 注释?如何修复?

DDD
DDD原创
2024-11-02 20:52:30527浏览

Why are HTML comments not displayed in Go templates and how can I fix it?

HTML 注释在 Go 模板中不显示 - 已解决

在 Go 应用程序中,使用 HTML 模板时默认不会渲染 HTML 注释。这可能会导致某些场景出现问题,例如使用 KnockoutJS 的无容器控制流语法时。为了解决这个问题,可以利用 template.HTML 在模板执行期间保留 HTML 注释。

使用 template.HTML 的一种方法是定义一个名为 safe() 的自定义模板函数。该函数接受一个字符串作为参数并将其作为 template.HTML 返回。通过 safe() 函数传递 HTML 注释,可以将它们标记为安全,并且在模板渲染期间不会被转义或省略。

下面是一个示例:

<code class="go">import (
    "html/template"
    "os"
)

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>`</code>

输出:

<html><body>
<!-- This is a comment -->
<div>Some <b>HTML</b> content</div>
</body></html>

要使用 safe() 函数,只需修改模板中的 HTML 注释以包含 safe() 函数调用,例如so:

<code class="html">{{safe "<!-- Some HTML comment -->"}}</code>

或者,使用管道运算符:

<code class="html">{{"<!-- Some HTML comment -->" | safe}}</code>

请注意,包含引号('"')的 HTML 注释需要转义,如下所示:

<code class="html">{{safe "<!-- Some \"HTML\" comment -->"}}</code>

不建议使用条件 HTML 注释,因为它们会干扰 html/模板的上下文相关转义包裹。

以上是为什么 Go 模板中不显示 HTML 注释?如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn