2011-01-31 19 views
129

używam interfejsu „Wiadomości”, aby przekazać wiadomości do użytkownika tak:Rendering zmiennej szablonu jako HTML

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

Chciałbym obejmują html w moim zmienna {{ message }} i czynią to bez ucieczki znaczników w szablon.

Odpowiedz

230

Jeśli chcesz dont't HTML uciekł, spojrzeć na filtrze safe i znacznik autoescape

FILTR: {{ myhtml |safe }}
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#safe

TAG: {% autoescape off %}{{ myhtml }}{% endautoescape %} http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape

+2

WOW. w ciągu 40 sekund 4 odpowiedzi –

+0

Jeśli chcesz wyświetlić np. znaki walut, takie jak euro ('€'), dolar przeszedł z widoku, to jest droga. – andi

21

można renderować szablon w kodzie tak:

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

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

Zobacz Django docs uzyskania dalszych informacji.

+0

Chyba mam zły koniec kija tutaj, ale mogę zostawić odpowiedź do teraz. –

27

Użyj autoescape włączyć HTML ucieczki od:

{% autoescape off %}{{ message }}{% endautoescape %} 
+0

Myślę, że zdecydowanie musimy podać '{% endautoescape%}' zamiast 'autoescape on'. Pokazuje błąd, jeśli nie zamkniemy: – Surya

+0

@Surya: Whoops, naprawiliśmy to. – mipadi

20

Jeśli chcesz zrobić coś bardziej skomplikowanego z tekstem, możesz utworzyć własny filtr i zrobić trochę magii przed zwróceniem html. Z pliku templatag patrząc 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żna dodać to w pliku szablonu

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

a to daje piękny efekt.

Powiązane problemy