英文:
How to stop html template from escaping
问题
我有一个HTML模板,我想要在模板之外插入一些JavaScript代码。在我的模板数据结构中,我创建了一个字符串字段JS string,并通过{{.JS}}调用它。问题是在浏览器中显示的所有内容都被转义了:
换行符是\n
<和>分别被转义为\u003c和\u003e
"被转义为\"
在模板内部相同的符号是正常的。如果我将我的JS字段打印到控制台上,也是正常的。我看到一些类似的问题通过使用template.HTML类型而不是string来解决。但在我的情况下,这根本不起作用。
编辑1
实际上的上下文是:
<script language="JavaScript">
    var options = {
        {{.JS}}
    };
</script>
英文:
I have an html template where i want to insert some JavaScript code from outside of template itself. In my template data struct i have created a string field JS string and call it with {{.JS}}. The problem is that everything in browser is escaped:
newlines are \n
< and > are \u003c and \u003e
" is \"
Same symbols inside of a template are fine. If I Print my JS field into console it is also fine. I have seen some similar problems solved by using template.HTML type instead of string. In my case it does not work at all.
EDIT 1
The actual context is
<script language="JavaScript">
    var options = {
        {{.JS}}
    };
</script>
答案1
得分: 13
要翻译的内容如下:
要么将字段的类型更改为template.JS,如下所示:
type Tmpl struct {
    // ...
    JS template.JS
}
要么声明一个简单的函数,将string转换为template.JS类型,如下所示:
func toJS(s string) template.JS {
    return template.JS(s)
}
然后使用Funcs方法注册该函数,并在模板中使用它,如下所示:
{{toJS .JS}}
英文:
Either change the field's type to template.JS like so:
type Tmpl struct {
    // ...
    JS template.JS
}
Or declare a simple function that converts a string to the template.JS type like so:
func toJS(s string) template.JS {
    return template.JS(s)
}
And then register the function with the Funcs method and use it in your template like so:
{{toJS .JS}}
答案2
得分: 4
尝试将JS的类型设置为template.JS:
import "html/template"
type x struct {
        JS template.JS
}
可以在这里找到文档。
英文:
Try setting the type of JS to template.JS:
import "html/template"
type x struct {
        JS template.JS
}
Documentation can be found here.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论