2012-08-27 11 views
6

Devo inserire la funzione javascript nel modello di mako. Il primo argomento di questa funzione è di stringa, quindi scrivere nel mio file * .mako (dict (field_name = 'geom')):Problema di fuga di Mako all'interno di Pyramid

init_map(
    '${field_name}' 
); 

Ma quando vedo la mia pagina html che loks come:

init_map(
    'geom' 
) 

Come posso disabilitare l'escape in questo caso?

rendering svolge nel seguente modo:

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

risposta

5

Avrai bisogno di includere le virgolette nella tua espressione, credo. È possibile utilizzare il modulo json di uscita validi letterali JavaScript:

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

e nel modello:

init_map(
    ${field_name | n} 
); 

Le citazioni sono poi generati dalla funzione .dumps(), e il filtro | n assicura che non sono fuggiti ; hai già reso i tuoi valori JavaScript sicuri, non ne hai nemmeno bisogno di HTML-safe.

Il vantaggio è che il modulo sfuggirà eventuali citazioni nei vostri valori JavaScript pure, e di gestire correttamente unicode:

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

Grazie per la risposta, ma nel mio caso il problema probabilmente era connesso con i modelli novo di mako. Quando ho creato un modello senza nidificare tutti funzionano bene. – drnextgis

+0

@Martjin Pieters Non dimenticare le virgolette ''$ {nome_campo | n} ''... :) –

+0

@VitaliPonomar: No! Le virgolette sono fornite dal modulo json.dumps! –

1

Prova n filtro. Secondo the docs, disabilita fuga (o qualsiasi altro filtro predefinito):

${field_name | n} 

UPDATE: Ci dispiace non ho notato che le virgolette sono intorno l'espressione. E ora sembra molto strano ...

+1

Il problema è che le quotazioni * * intorno all'espressione siamo scampati. –

+0

Così esattamente e sembra un problema con Pyramid, perché il rendering diretto attraverso Mako funziona bene. – drnextgis