2012-08-27 88 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