2012-08-27 16 views
6

Necesito poner la función de Javascript en la plantilla de mako. El primer argumento de esta función es una cadena, por lo que escribir en mi archivo * .mako (dict (nombre_campo = 'geom')):Problema de escape de Mako dentro de Pyramid

init_map(
    '${field_name}' 
); 

Pero cuando veo a mi página HTML que loks como:

init_map(
    'geom' 
) 

¿Cómo puedo desactivar el escape en este caso?

representación lleva a cabo de la siguiente manera:

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

Respuesta

5

Tendrás que incluir las comillas en tu expresión, creo. Se puede utilizar el módulo de json de salida válida literales de JavaScript:

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

y en su plantilla:

init_map(
    ${field_name | n} 
); 

Las citas continuación se generan por la función .dumps(), y el filtro | n asegura que no se escapan ; Ya has hecho que tus valores JavaScript sean seguros, tampoco los necesitas HTML-safe.

La ventaja añadida es que el módulo se escapará ningún cotizaciones en sus valores de JavaScript, así, y manejar adecuadamente Unicode:

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

Gracias por responder, pero en mi caso el problema probablemente estaba relacionado con las plantillas de mako anidadas. Cuando construí una plantilla sin anidar, todo se volvió perfecto. – drnextgis

+0

@Martjin Pieters No se olvide de las citas ''$ {field_name | n} ''... :) –

+0

@VitaliPonomar: ¡No! ¡Las citas las proporciona el módulo json.dumps! –

1

Trate n filtro. De acuerdo con the docs, deshabilita escape (o cualquier otro filtrado por defecto):

${field_name | n} 

ACTUALIZACIÓN: Lo siento, no me había dado cuenta de que las comillas son alrededor de la expresión. Y ahora parece muy extraño ...

+1

El problema es que las cotizaciones * * alrededor de la expresión se escapó. –

+0

Así que exactamente y parece un problema de pirámide, porque directamente rendreing a través de Mako funciona bien. – drnextgis