6

我需要将 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)
4

2 回答 2

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"
于 2012-08-27T07:59:47.757 回答
1

试试n过滤器。根据文档,它禁用转义(或任何其他默认过滤):

${field_name | n}

更新:对不起,我没有注意到引号在表达式周围。现在看起来很奇怪......

于 2012-08-27T07:48:52.210 回答