2012-08-27 10 views
6

Muszę umieścić funkcję javascript na szablonie mako. Pierwszym argumentem tej funkcji jest ciąg, więc piszę w moim pliku * .mako (DICT (nazwa_pola = 'geom')):Mako wydobywające problem w obrębie piramidy

init_map(
    '${field_name}' 
); 

Ale kiedy widzę moją stronę html to loks jak:

init_map(
    'geom' 
) 

Jak mogę wyłączyć ucieczkę w tym przypadku?

Rendering wykonuje następujący sposób:

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

Odpowiedz

5

Będziesz musiał uwzględnić cytaty w wyrażeniu Myślę, że. Można użyć modułu json do wyjściowych ważnych literałów javascript:

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

w szablonie:

init_map(
    ${field_name | n} 
); 

Cytaty są następnie generowany przez funkcję .dumps(), a filtr | n zapewnia, że ​​nie są uciekł ; już uczyniłeś swoje wartości JavaScript bezpiecznymi, nie potrzebujesz ich również w wersji HTML.

Dodatkową zaletą jest to, że moduł będzie uciec żadnych cytatów w swoich wartościach JavaScript, jak również, a właściwie obsłużyć unicode:

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

Dzięki za odpowiedź, ale w moim przypadku problem prawdopodobnie był związany z zagnieżdżonymi szablonami mako. Kiedy zbudowałem jeden szablon bez zagnieżdżenia, wszystkie działają dobrze. – drnextgis

+0

@Martjin Pieters Nie zapomnij o cudzysłowach ''$ {field_name | n.} '' ... :) –

+0

@VitaliPonomar: Nie! Cytaty są dostarczane przez moduł json.dumps! –

1

Spróbuj n filtr. Według the docs, to wyłącza ucieczki (lub innego domyślnego filtrowania):

${field_name | n} 

UPDATE: Niestety nie zauważyłem, że cytaty są wokół wyrażenie. A teraz wydaje się bardzo dziwne ...

+1

Problemem jest to, że cytaty * ok * wyrazem są uciekł. –

+0

Tak dokładnie i wygląda na problem z Pyramid, ponieważ bezpośrednie renderowanie za pośrednictwem Mako działa dobrze. – drnextgis