Representar una variable de plantilla como HTML

193

Utilizo la interfaz de 'mensajes' para pasar mensajes al usuario como este:

request.user.message_set.create(message=message)

Me gustaría incluir html en mi {{ message }}variable y representarlo sin escapar del marcado en la plantilla.

xpanta
fuente

Respuestas:

348

Si no desea que se escape el HTML, mire el safefiltro y la autoescapeetiqueta:

safe:

{{ myhtml |safe }}

autoescape:

{% autoescape off %}
    {{ myhtml }}
{% endautoescape %}
Yuji 'Tomita' Tomita
fuente
Si necesita mostrar, por ejemplo, signos de moneda como euro ( €), dólar pasado de la vista, este es el camino a seguir.
andilabs
Tenga en cuenta que lo es autoescape offy no on. Cometí ese error y lo descubrí solo más tarde.
Anupam
38

Si desea hacer algo más complicado con su texto, puede crear su propio filtro y hacer algo de magia antes de devolver el html. Con un archivo de etiqueta de plantilla con este aspecto:

from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def do_something(title, content):

    something = '<h1>%s</h1><p>%s</p>' % (title, content)
    return mark_safe(something)

Entonces podrías agregar esto en tu archivo de plantilla

<body>
...
    {{ title|do_something:content }}
...
</body>

Y esto le daría un buen resultado.

Ninja del ganso
fuente
31

Puede representar una plantilla en su código así:

from django.template import Context, Template
t = Template('This is your <span>{{ message }}</span>.')

c = Context({'message': 'Your message'})
html = t.render(c)

Consulte los documentos de Django para obtener más información.

Marcus Whybrow
fuente
Creo que me equivoqué de lado aquí, pero dejo la respuesta por ahora.
Marcus Whybrow
31

Utilice autoescapepara desactivar el escape HTML:

{% autoescape off %}{{ message }}{% endautoescape %}
mipadi
fuente