Renderowanie zmiennej szablonu jako HTML


186

Korzystam z interfejsu „wiadomości”, aby przekazywać wiadomości do użytkownika w następujący sposób:

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

Chciałbym dołączyć html do mojej {{ message }}zmiennej i renderować ją bez uciekania od znaczników w szablonie.

Odpowiedzi:


333

Jeśli nie chcesz, aby kod HTML był zmieniany, spójrz na safefiltr i autoescapeznacznik:

safe:

{{ myhtml |safe }}

autoescape:

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

Jeśli chcesz wyświetlać np. Znaki walutowe, takie jak euro ( €), dolara przeszedł z widoku, to jest właściwy sposób.
andilabs

Zauważ, że tak jest autoescape offi nie on. Popełniłem ten błąd i odkryłem go dopiero później.
Anupam

37

Jeśli chcesz zrobić coś bardziej skomplikowanego z tekstem, możesz utworzyć własny filtr i trochę magii przed zwróceniem html. Z plikiem szablonu wyglądającym tak:

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)

Następnie możesz dodać to do pliku szablonu

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

A to dałoby dobry wynik.


30

Możesz renderować szablon w kodzie w następujący sposób:

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

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

Więcej informacji można znaleźć w dokumentacji Django .


Myślę, że mam zły koniec kija tutaj, ale na razie zostawiam odpowiedź.
Marcus Whybrow



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.