2008-10-26 12 views
14

En mi aplicación django estoy usando una plantilla para construir el cuerpo del correo electrónico, uno de los parámetros es url, tenga en cuenta que hay dos parámetros separados por ampersand en la url.Cómo deshabilitar la codificación HTML al usar Contexto en django

t = loader.get_template("sometemplate") 
c = Context({ 
    'foo': 'bar', 
    'url': 'http://127.0.0.1/test?a=1&b=2', 
}) 
print t.render(c) 

Después de rendir produce: http://127.0.0.1/test?a=1&b=2

Nota del signo se codifica como HTML "& amp;". Una forma de evitar el problema es pasar cada parámetro por separado a mi plantilla y construir la url en la plantilla, pero me gustaría evitar hacerlo.

¿Hay alguna manera de deshabilitar la codificación HTML de los parámetros de contexto o, como mínimo, evitar la codificación de símbolos?

Respuesta

19

para apagarlo para una sola variable, utilice mark_safe:

from django.utils.safestring import mark_safe 

t = loader.get_template("sometemplate") 
c = Context({ 
    'foo': 'bar', 
    'url': mark_safe('http://127.0.0.1/test?a=1&b=2'), 
}) 
print t.render(c) 

alternativa, a su vez totalmente autoescaping fuera de su código Python, use the autoescape argument when initialising a Context:

c = Context({ 
    'foo': 'bar', 
    'url': 'http://127.0.0.1/test?a=1&b=2', 
}, autoescape=False) 

La sección How to turn [Automatic HTML escaping] off de la documentación cubre algunas de las opciones en plantilla si prefiere hacerlo allí.

+0

mark_safe hizo exactamente lo que yo quería, lo necesitaba solo para 1 parámetro –

7

O simplemente use el filtro "seguro" en su plantilla.

Además, no puedo dejar de insistir en lo importante que es familiarizarse con la documentación de Django; muchas preguntas comunes como esta tienen respuestas y explicaciones fáciles de encontrar (like this one), y leer los documentos y tener una idea de cómo funciona todo disminuirá drásticamente la cantidad de tiempo que necesita gastar para preguntar "¿por qué lo hizo?" y aumente la cantidad de tiempo que pasa construyendo cosas que funcionan de la manera que desea.

Cuestiones relacionadas