Mako逃离金字塔内的问题

时间:2012-08-27 06:53:06

标签: python escaping pyramid mako

我需要将javascript函数放到mako模板中。这个函数的第一个参数是字符串,所以我写入我的* .mako文件(dict(field_name ='geom')):

init_map(
    '${field_name}'
);

但是当我看到我的html页面时,它就像是:

init_map(
    'geom'
)

在这种情况下如何禁用转义?

渲染执行以下方式:

from pyramid.renderers import render
render('georenderer/map.mako', template_args)

2 个答案:

答案 0 :(得分:5)

我认为你需要在你的表达中包含引号。您可以使用json模块输出有效的JavaScript文字:

dict(field_name=json.dumps('geom'))

并在您的模板中:

init_map(
    ${field_name | n}
);

引号由.dumps()函数生成,| n过滤器确保它们不会被转义;你已经使你的价值观JavaScript安全,你也不需要HTML安全。

附加的优点是模块也会转义JavaScript值中的任何引号,并正确处理unicode:

>>> import json
>>> print json.dumps(u'Quotes and unicode: " \u00d8')
"Quotes and unicode: \" \u00d8"

答案 1 :(得分:1)

尝试n过滤器。根据{{​​3}},它会禁用转义(或任何其他默认过滤):

${field_name | n}

更新:抱歉,我没注意到引号是围绕表达式。现在看起来很奇怪......