Şablon değişkenini HTML olarak oluşturma


186

Mesajları şu şekilde kullanıcıya iletmek için 'mesajlar' arayüzünü kullanıyorum:

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

{{ message }}Değişkenime html eklemek ve şablondaki işaretlemeden kaçmadan işlemek istiyorum .

Yanıtlar:


333

HTML'den kaçılmasını istemiyorsanız, safefiltreye ve autoescapeetikete bakın:

safe:

{{ myhtml |safe }}

autoescape:

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

Eğer euro ( €) gibi para birimi işaretleri görüntülemek gerekiyorsa , dolar görünümden geçti bu gitmek için yol.
— andilabs

Dikkat edin autoescape offve değil on. Bu hatayı yaptım ve ancak daha sonra keşfettim.
— Anupam

37

Metninizle daha karmaşık bir şey yapmak istiyorsanız, kendi filtrenizi oluşturabilir ve html'yi iade etmeden önce biraz sihir yapabilirsiniz. Templatag dosyası şuna benzer:

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)

Ardından bunu şablon dosyanıza ekleyebilirsiniz

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

Ve bu size güzel bir sonuç verecektir.


30

Kodunuzda şu şekilde bir şablon oluşturabilirsiniz:

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

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

Daha fazla bilgi için Django belgelerine bakın .


Sanırım burada çubuğun yanlış ucunu aldım, ama şimdilik cevabı bırakıyorum.
— Marcus Whybrow

30

autoescapeHTML çıkışını kapatmak için şunu kullanın :

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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.