Kết xuất biến mẫu dưới dạng HTML


186

Tôi sử dụng giao diện 'tin nhắn' để truyền tin nhắn cho người dùng như thế này:

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

Tôi muốn bao gồm html trong {{ message }}biến của mình và hiển thị nó mà không thoát khỏi đánh dấu trong mẫu.

Câu trả lời:


331

Nếu bạn không muốn HTML được thoát, hãy xem safebộ lọc và autoescapethẻ:

safe:

{{ myhtml |safe }}

autoescape:

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

Nếu bạn cần hiển thị ví dụ như các ký hiệu tiền tệ như euro ( €), đồng đô la được chuyển từ chế độ xem thì đây là cách để đi.
andilabs

Lưu ý rằng nó là autoescape offvà không on. Tôi đã phạm sai lầm đó và chỉ phát hiện ra nó sau này.
Anupam

37

Nếu bạn muốn làm một cái gì đó phức tạp hơn với văn bản của mình, bạn có thể tạo bộ lọc của riêng mình và thực hiện một số phép thuật trước khi trả lại html. Với một tệp templatag trông như thế này:

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)

Sau đó, bạn có thể thêm điều này trong tệp mẫu của bạn

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

Và điều này sẽ cho bạn một kết quả tốt đẹp.



29

Bạn có thể kết xuất một mẫu trong mã của mình như vậy:

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

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

Xem tài liệu Django để biết thêm thông tin.


Tôi nghĩ rằng tôi đã nhận được kết thúc sai của thanh ở đây, nhưng bây giờ tôi để lại câu trả lời.
Marcus Whybrow


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.