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.

Respuestas:


348

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

safe:

{{ myhtml |safe }}

autoescape:

{% autoescape off %}
    {{ myhtml }}
{% endautoescape %}

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.


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.


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 %}


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.