Rendering variabel templat sebagai HTML

186

Saya menggunakan antarmuka 'pesan' untuk mengirimkan pesan ke pengguna seperti ini:

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

Saya ingin memasukkan html dalam {{ message }}variabel saya dan membuatnya tanpa keluar dari markup di template.

xpanta
sumber

Jawaban:

333

Jika Anda tidak ingin HTML keluar, lihat safefilter dan autoescapetag:

safe:

{{ myhtml |safe }}

autoescape:

{% autoescape off %}
    {{ myhtml }}
{% endautoescape %}
Yuji 'Tomita' Tomita
sumber
Jika Anda perlu menampilkan mis. Tanda-tanda mata uang seperti euro ( €), dolar lulus dari tampilan ini adalah cara untuk pergi.
andilabs
Perhatikan bahwa itu autoescape offdan tidak on. Saya membuat kesalahan itu dan baru menemukannya kemudian.
Anupam
37

Jika Anda ingin melakukan sesuatu yang lebih rumit dengan teks Anda, Anda dapat membuat filter sendiri dan melakukan beberapa sihir sebelum mengembalikan html. Dengan file templatag yang terlihat seperti ini:

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)

Kemudian Anda bisa menambahkan ini di file templat Anda

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

Dan ini akan memberi Anda hasil yang bagus.

Ninja Angsa
sumber
30

Anda dapat merender template dalam kode Anda seperti:

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

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

Lihat dokumen Django untuk informasi lebih lanjut.

Marcus Whybrow
sumber
Saya pikir saya mendapatkan ujung tongkat yang salah di sini, tetapi saya meninggalkan jawabannya untuk sekarang.
Marcus Whybrow
30

Gunakan autoescapeuntuk mematikan HTML:

{% autoescape off %}{{ message }}{% endautoescape %}
mipadi
sumber