Pregunta

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.

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 símbolo "ampersand" está codificado en HTML como " & amp; amp; " ;. Una forma de solucionar 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, al menos, evitar la codificación de los símbolos de orden?

¿Fue útil?

Solución

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 totalmente el autoescape de tu código Python, use el argumento autoescape al inicializar un Context :

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

El Cómo activar [HTML automático Escapar de la sección de desactivación de la documentación cubre algunas de las opciones de la plantilla si prefiere hacerlo allí.

Otros consejos

O simplemente use el " seguro " filtrar en tu plantilla.

Además, no puedo enfatizar lo suficiente 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 necesitas para preguntar "¿por qué hizo eso?" y aumenta la cantidad de tiempo que pasas construyendo cosas que funcionan de la manera que deseas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top