J'utilise l'interface 'messages' pour transmettre des messages à l'utilisateur comme ceci:
request.user.message_set.create(message=message)
Je voudrais inclure le code HTML dans ma variable {{ message }}
et le rendre sans échapper le balisage dans le modèle.
Si vous ne voulez pas que le code HTML soit échappé, examinez le filtre safe
et la balise autoescape
:
safe
:
{{ myhtml |safe }}
{% autoescape off %}
{{ myhtml }}
{% endautoescape %}
Si vous voulez faire quelque chose de plus compliqué avec votre texte, vous pouvez créer votre propre filtre et faire un peu de magie avant de renvoyer le code HTML. Avec un fichier templatag ressemblant à ceci:
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)
Ensuite, vous pouvez ajouter ceci dans votre fichier de modèle
<body>
...
{{ title|do_something:content }}
...
</body>
Et cela vous donnerait un bon résultat.
Utilisez le autoescape
pour désactiver l'échappement HTML:
{% autoescape off %}{{ message }}{% endautoescape %}
Vous pouvez rendre un modèle dans votre code de la manière suivante:
from Django.template import Context, Template
t = Template('This is your <span>{{ message }}</span>.')
c = Context({'message': 'Your message'})
html = t.render(c)
Voir le Django docs pour plus d'informations.
Le moyen le plus simple consiste à utiliser le filtre safe
:
{{ message|safe }}
Consultez le documentation Django pour le filtre sécurisé pour plus d'informations.
Pas besoin d'utiliser le filtre ou la balise dans le modèle. Utilisez simplement format_html () pour convertir une variable en HTML. Django désactive automatiquement l'échappement pour votre variable.
format_html("<h1>Hello</h1>")
Découvrez ici https://docs.djangoproject.com/fr/1.9/ref/utils/