首页 > 后端开发 > Golang > 正文

为什么我的 Go HTML 注释在渲染页面中消失?

Patricia Arquette
发布: 2024-11-02 05:09:03
原创
765 人浏览过

Why Are My Go HTML Comments Disappearing in Rendered Pages?

Go HTML 注释不渲染:使用 template.HTML 的解决方案

在 Go Web 应用程序中,渲染页面中 HTML 注释的消失可能是一个令人沮丧的问题。对于依赖于无容器控制流语法的 KnockoutJS 代码来说,这尤其成问题。

此行为背后的原因是,默认情况下,Go 的 html/template 包出于安全原因会转义 HTML 内容。这意味着包含在 中的 HTML 注释将呈现为转义文本,而不是显示为注释。

为了解决此问题,html/template 包提供了一种特殊类型称为模板.HTML。这种类型的值在渲染时不会转义。

自定义函数方法

一个有效的解决方案是为模板创建一个自定义函数,将 HTML 注释包装在模板中.HTML。具体操作方法如下:

<code class="go">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>
登录后复制

在此示例中,我们定义了一个 safe() 函数,该函数接受字符串参数并将其作为 template.HTML 返回。在模板中,我们可以使用 {{safe ""}} 将 HTML 注释传递给此函数。这可确保注释不会被转义。

用法

要使用此技术,只需将 HTML 注释转换为以下格式:

<code class="html">{{safe "<!-- Your comment -->"}}</code>
登录后复制

<code class="html">{{"<!-- Your comment -->" | safe}}</code>
登录后复制

通过使用此方法,您的 HTML 注释将保留在呈现的内容中

注意:

  • 如果您的 HTML 注释包含引号,请务必正确转义它们,例如 {{safe "“}}。
  • 避免使用条件 HTML 注释,因为它们会干扰上下文相关的注释转义机制。

以上是为什么我的 Go HTML 注释在渲染页面中消失?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!