django - safe - Renderizar una variable de plantilla como HTML
django template tags (6)
Uso la interfaz de ''mensajes'' para pasar mensajes al usuario de esta manera:
request.user.message_set.create(message=message)
Me gustaría incluir html en mi variable {{ message }}
y renderizarlo sin escapar del marcado en la plantilla.
La forma más sencilla es usar el filtro safe
:
{{ message|safe }}
Consulte la documentación de Django para obtener el filtro seguro para obtener más información.
No es necesario usar el filtro o la etiqueta en la plantilla. Simplemente use format_html () para traducir variable a html y Django automáticamente desactivará el escape para su variable.
format_html("<h1>Hello</h1>")
Consulte aquí https://docs.djangoproject.com/en/1.9/ref/utils/
Puedes renderizar una plantilla en tu 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.
Si no quiere que se escape HTML, mire el filtro safe
y la etiqueta de autoescape
FILTRO: {{ myhtml |safe }}
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#safe
ETIQUETA: {% autoescape off %}{{ myhtml }}{% endautoescape %}
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape
Si quieres hacer algo más complicado con tu texto, puedes crear tu propio filtro y hacer algo de magia antes de devolver el html. Con un archivo templatag como este:
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 te daría un buen resultado.
Use el autoescape
para desactivar el escapado de HTML:
{% autoescape off %}{{ message }}{% endautoescape %}