下面的程序写

<html><body>Hello <script>[{"A":"foo","B":"bar"},{"A":"bar","B":"baz"}]</script></body></html>

由于<script> -Tag(它对字符串编码执行了一些JavaScript JSON)。没有<script> -Tag,我怎么能得到相同的?那就是:我想写
t, err := template.New("foo").Parse("<html><body>Hello <pre>{{.}}</pre></body></html>\n")

并得到
<html><body>Hello <pre>[{"A":"foo","B":"bar"},{"A":"bar","B":"baz"}]</pre></body></html>

背部?我已经在模板包中看到了上下文的| ...语法,但是应该使用哪个上下文?
package main

import (
    "html/template"
    "log"
    "os"
)

func main() {

    type keyvalue struct {
        A, B string
    }

    a := []keyvalue{{"foo", "bar"}, {"bar", "baz"}}

    t, err := template.New("foo").Parse("<html><body>Hello <script>{{.}}</script></body></html>\n")
    if err != nil {
        log.Fatal(err)
    }
    err = t.ExecuteTemplate(os.Stdout, "foo", a)
    if err != nil {
        log.Fatal(err)
    }
}

背景:我需要为X-Editable JavaScript library生成一个HTML属性,如下所示:source="[{value: 1, text: 'text1'}, {value: 2, text: 'text2'}, ...]"

最佳答案

如果您对生成的HTML有“特殊需求”,则可以使用text/template

但也许在您的情况下,最好先将a转换为字符串表示形式,然后将此字符串填充到呈现中。我认为这使您想做的事情更加清楚。

或者:编写您自己的过滤器函数(请参阅http://golang.org/pkg/html/template/#Template.Funcs),该函数将使用此字符串处理模板中的函数调用。

关于templates - html/template : how to get JavaScript (JSON) escaping without <script> tag?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18589973/

10-09 15:19
查看更多