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.