python - template - Cómo deshabilitar la codificación HTML al usar Contexto en django
django views (2)
O simplemente use el filtro "seguro" en su plantilla.
Además, no puedo enfatizar lo importante que es estar familiarizado con la documentación de Django; muchas preguntas comunes como esta tienen respuestas y explicaciones fáciles de encontrar ( como esta ), 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? eso "y aumente la cantidad de tiempo que pasa construyendo cosas que funcionan de la manera que desea.
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 el signo y en la url.
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 renderizar produce: http://127.0.0.1/test?a=1&b=2
Tenga en cuenta que el ampersand está codificado en HTML como "& 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 forma de desactivar la codificación HTML de los parámetros de contexto o, como mínimo, evitar la codificación de símbolos?
Para desactivarlo para una sola variable, use 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)
Alternativamente, para desactivar completamente el autoescaping de su código de Python, use el argumento de autoescape
al inicializar un Context
:
c = Context({
''foo'': ''bar'',
''url'': ''http://127.0.0.1/test?a=1&b=2'',
}, autoescape=False)
La sección Cómo desactivar el [escape de HTML automático] de la documentación cubre algunas de las opciones de la plantilla si prefiere hacerlo allí.