Rendern einer Vorlagenvariablen als HTML


186

Ich benutze die 'Nachrichten'-Oberfläche, um Nachrichten wie folgt an den Benutzer weiterzuleiten:

request.user.message_set.create(message=message)

Ich möchte HTML in meine {{ message }}Variable aufnehmen und rendern, ohne das Markup in der Vorlage zu umgehen.

Antworten:


331

Wenn Sie nicht möchten, dass der HTML-Code maskiert wird, sehen Sie sich den safeFilter und das autoescapeTag an:

safe::

{{ myhtml |safe }}

autoescape::

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

Wenn Sie z. B. Währungszeichen wie euro ( €) anzeigen müssen, ist dies der richtige Weg.
Andilabs

Beachten Sie, dass dies der Fall ist autoescape offund nicht on. Ich habe diesen Fehler gemacht und ihn erst später entdeckt.
Anupam

37

Wenn Sie etwas Komplizierteres mit Ihrem Text machen möchten, können Sie Ihren eigenen Filter erstellen und etwas Magie anwenden, bevor Sie den HTML-Code zurückgeben. Mit einer Templatag-Datei, die so aussieht:

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)

Dann können Sie dies in Ihre Vorlagendatei einfügen

<body>
...
    {{ title|do_something:content }}
...
</body>

Und das würde Ihnen ein schönes Ergebnis bringen.


30

Verwenden Sie die autoescape, um HTML-Escape zu deaktivieren:

{% autoescape off %}{{ message }}{% endautoescape %}

29

Sie können eine Vorlage in Ihrem Code folgendermaßen rendern:

from django.template import Context, Template
t = Template('This is your <span>{{ message }}</span>.')

c = Context({'message': 'Your message'})
html = t.render(c)

Weitere Informationen finden Sie in den Django-Dokumenten .


Ich glaube, ich habe hier das falsche Ende des Stocks, aber ich lasse die Antwort vorerst.
Marcus Whybrow


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.