3

我正在使用 Mako 模板在 Pylons 下开发。问题是我需要将 tmpl_context 的某个属性中的字符串分配给页面正文中的 JavaScript 变量。另一个问题是这个字符串可以是非常任意的,即可以包含诸如“,',<,>等这样的字符......有没有一种常见的方法来做这样的分配?我试过类似的东西:

<script>
    ...
    var a = "${c.my_string}";
    ...
</script>

但我得到引号和 HTML 特殊字符转义。但我不想禁用过滤,因为可能执行意外代码的危险。

4

2 回答 2

2

您在 c.my_string 中有一些任意数据,因此不想使用“|n”,对吧?

以 JS 风格转义的最快方法是

var a = ${c.my_string.__repr__()|n}; # Note lack of "" around it! 

但是我不确定<>字符(插入类似的东西</script>),也许你也想使用.replace('<', '&lt;');

对于 unicode,您还需要从字符串的开头删除 'u' 字符。

于 2010-08-01T15:33:30.453 回答
1

如果我明白你想要什么,请尝试webhelpers.html.literal

帮手:

from webhelpers.html import literal

html:

<script>
    document.write('${h.literal(c.my_string)}');
</script>

这比${c.mystring|n}转义html好

于 2010-08-01T15:14:08.933 回答