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.

Jawaban:


333

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

safe:

{{ myhtml |safe }}

autoescape:

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

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.


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.


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



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.