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.