Golang:停止转义html模板

时间:2017-05-16 18:33:32

标签: go escaping

我有一个html模板,我想从模板本身之外插入一些JavaScript代码。在我的模板数据结构中,我创建了一个字符串字段JS string,并使用{{.JS}}调用它。问题是浏览器中的所有内容都被转义:

换行符为\n

<>\u003c\u003e

"\"

模板内的相同符号很好。如果我将JS字段打印到控制台,它也没关系。我已经看到使用template.HTML类型而不是string解决了一些类似的问题。就我而言,根本不起作用。

编辑1

实际情况是

<script language="JavaScript">
    var options = {
        {{.JS}}
    };
</script>

2 个答案:

答案 0 :(得分:8)

将字段的类型更改为template.JS,如下所示:

type Tmpl struct {
    // ...
    JS template.JS
}

或者声明一个简单的函数,将string转换为template.JS类型,如下所示:

func toJS(s string) template.JS {
    return template.JS(s)
}

然后使用Funcs方法注册该函数,并在模板中使用它,如下所示:

{{toJS .JS}}

答案 1 :(得分:3)

尝试将JS的类型设置为template.JS

import "html/template"

type x struct {
        JS template.JS
}

可以找到文档here