如何通过Mako将Pylons控制器中的字符串值赋给JavaScript变量?
我正在使用Pylons和Mako模板进行开发。现在遇到一个问题,我需要把tmpl_context中的某个属性的字符串赋值给页面中的一个JavaScript变量。还有一个额外的问题是,这个字符串可能包含一些特殊字符,比如双引号、单引号、<、>等。请问有没有什么通用的方法来完成这个赋值呢?
我试过类似这样的代码:
<script>
...
var a = "${c.my_string}";
...
</script>
但是我发现引号和HTML中的特殊字符都被转义了。我不想关闭过滤功能,因为这样可能会有执行意外代码的风险。
2 个回答
1
如果我理解你的意思的话,可以试试 webhelpers.html.literal
:
助手:
from webhelpers.html import literal
HTML:
<script>
document.write('${h.literal(c.my_string)}');
</script>
这样比用 ${c.mystring|n}
来转义 HTML 要好。
2
你在c.my_string里有一些随意的数据,所以你不想使用"|n",对吧?
在JavaScript风格的转义中,最快的方法是
var a = ${c.my_string.__repr__()|n}; # Note lack of "" around it!
不过我不太确定<>
这些字符(比如插入</script>
的情况),也许你还想用.replace('<', '<');
来处理一下。
对于unicode字符,你还需要把字符串开头的'u'字符去掉。