Mako逃离金字塔内的问题

drn*_*gis 6 python escaping mako pyramid

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

init_map(
    '${field_name}'
);
Run Code Online (Sandbox Code Playgroud)

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

init_map(
    'geom'
)
Run Code Online (Sandbox Code Playgroud)

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

渲染执行以下方式:

from pyramid.renderers import render
render('georenderer/map.mako', template_args)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

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

dict(field_name=json.dumps('geom'))
Run Code Online (Sandbox Code Playgroud)

并在您的模板中:

init_map(
    ${field_name | n}
);
Run Code Online (Sandbox Code Playgroud)

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

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

>>> import json
>>> print json.dumps(u'Quotes and unicode: " \u00d8')
"Quotes and unicode: \" \u00d8"
Run Code Online (Sandbox Code Playgroud)