Go - 不呈现 HTML 注释

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


这是我的代码:


<!-- prepare the breadcrumbs -->

<ul class="breadcrumb" data-bind="foreach: viewModel.breadcrumbs">

    <!-- ko if: ($index() + 1) < len(viewModel.breadcrumbs()) -->

    <li>

        <a data-bind="attr: { href: href }">

            <i class="fa fa-home"></i> 

            <span data-bind="text: title"></span>

        </a>

    </li>

    <!-- /ko -->


    <!-- ko if: ($index() + 1) == len(viewModel.breadcrumbs()) -->

    <li class="active" data-bind="text: title"></li>

    <!-- /ko -->

</ul>

这是呈现的页面源:

http://img4.mukewang.com/61a492220001e8a310590423.jpg

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

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


qq_花开花谢_0
浏览 198回答 2
2回答

Helenr

包中有一个特殊类型html/template:template.HTML. 呈现模板时,模板中此类型的值不会被转义。因此,您可以“标记”您的 HTML 注释template.HTML,以便在执行模板期间它们不会被转义或省略。一种方法是为您的模板注册一个自定义函数,该函数可以从您的模板中调用,该函数接受一个string参数并将其返回为template.HTML. 您可以将所有 HTML 注释“传递”给此函数,因此,您的 HTML 注释将保留在输出中。看这个例子:func main() {&nbsp; &nbsp; t := template.Must(template.New("").Funcs(template.FuncMap{&nbsp; &nbsp; &nbsp; &nbsp; "safe": func(s string) template.HTML { return template.HTML(s) },&nbsp; &nbsp; }).Parse(src))&nbsp; &nbsp; 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包的上下文敏感转义。

泛舟湖上清波郎朗

您可以使用和(https://golang.org/pkg/text/template/#hdr-Functions)等内置函数text/template代替html/template并手动执行所有转义。请注意,这很容易出错。htmljs
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go