Ş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.