web-dev-qa-db-fra.com

Rendu d'une variable de modèle au format HTML

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.

166
xpanta

Si vous ne voulez pas que le code HTML soit échappé, examinez le filtre safe et la balise autoescape:

safe :

{{ myhtml |safe }}

autoescape :

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

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.

31
Goose Ninja

Utilisez le autoescape pour désactiver l'échappement HTML:

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

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.

26
Marcus Whybrow

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.

16
Marcus Whybrow

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/

5
NorWay