2012-08-27 54 views
6

我需要将javascript函数放到mako模板中。这个函数的第一个参数是字符串,所以我写在我的* .mako文件(字典(FIELD_NAME = 'GEOM')):金字塔内的Mako转义问题

init_map(
    '${field_name}' 
); 

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

init_map(
    'geom' 
) 

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

呈现的执行方式如下:

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

回答

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" 
+0

感谢您的回答,但在我的案例中,问题可能与嵌套的mako模板有关。当我构建了一个没有嵌套的模板时,它们都可以正常工作。 – drnextgis

+0

@Martjin Pieters别忘了引号''$ {field_name | n}''... :) –

+0

@VitaliPonomar:不!引号由json.dumps模块提供! –

1

尝试n过滤器。据the docs,它禁用逃逸(或任何其他缺省过滤):

${field_name | n} 

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

+1

的问题是,报价* *周围的表达被转义。 –

+0

确切地说,它看起来像金字塔问题,因为通过Mako直接重新编译工作正常。 – drnextgis