Jinja2 tự động thoát tất cả các thẻ HTML, nhưng tôi không muốn thoát khỏi một số thẻ (như img
, b
và một số thẻ khác). Tôi làm nó như thế nào?Jinja2 thoát tất cả HTML nhưng img, b, v.v.
Trả lời
Bạn có thể viết bộ lọc của riêng mình. scrubber library là khá tốt trong việc dọn dẹp HTML. Bộ lọc sẽ cần bọc chuỗi được trả lại trong jinja2.Markup
để mẫu sẽ không thoát khỏi chuỗi đó.
Edit: một ví dụ mã
import jinja2
import scrubber
def sanitize_html(text):
return jinja2.Markup(scrubber.Scrubber().scrub(text))
jinja_env.filters['sanitize_html'] = sanitize_html
Bạn sẽ muốn phân tích đầu vào trên trình sử dụng một cách tiếp cận danh sách trắng - có rất nhiều ví dụ tốt in this question và viable options ra khỏi đó.
Một khi bạn đã làm điều đó, bạn có thể đánh dấu bất kỳ biến sẽ chứa HTML mà không được kết thúc bằng các bộ lọc safe
:
{{comment|safe}}
Thư viện Bleach có thể làm rất tốt.
Ví dụ, giả sử biến 'jinja_env' là trong phạm vi:
from bleach import clean
from markupsafe import Markup
def do_clean(text, **kw):
"""Perform clean and return a Markup object to mark the string as safe.
This prevents Jinja from re-escaping the result."""
return Markup(clean(text, **kw))
jinja_env.filters['clean'] = do_clean
Sau đó, trong một mẫu mà bạn có thể có một cái gì đó như:
<p>{{ my_variable|clean(tags=['img', 'b', 'i', 'em', 'strong'], attributes={'img': ['src', 'alt', 'title', 'width', 'height']}) }}</p>
Bạn cũng có thể sử dụng một callable (thay vì một danh sách) trong các thuộc tính, cho phép xác nhận kỹ lưỡng hơn các thuộc tính (ví dụ như kiểm tra xem src có cung cấp một URL hợp lệ) hay không. Tài liệu hiển thị an example.
- 1. jinja2: biến số thoát html
- 2. Chuyển HTML sang mẫu bằng Flask/Jinja2
- 3. Chuỗi thoát cho JavaScript bằng Jinja2?
- 4. Thoát khỏi tất cả các phiên
- 5. Python thoát khỏi byte b''
- 6. HTML/CSS - Đặt img trên đầu trang của img?
- 7. thoát tất cả các chuỗi trong JSP/Spring MVC
- 8. Tạo biểu mẫu HTML bằng Jinja2 - Mất
- 9. Xóa tất cả JavaScript khỏi trang HTML
- 10. Tước tất cả các thẻ html với Html Agility Pack
- 11. jQuery nhận tất cả các thuộc tính HTML
- 12. Thoát html trong Java
- 13. Ngăn chặn django quản trị thoát html
- 14. Cách viết tên thực thể HTML ( , <, >, v.v.)
- 15. Cảnh báo là Lỗi, nhưng không phải tất cả
- 16. Strip tất cả nhưng trước tiên 5 ký tự - Python
- 17. Chọn tất cả li nhưng không phải trẻ em
- 18. Mercurial `hg clone` nhưng bỏ qua tất cả subrepos?
- 19. notepad ++ Inverse Regex thay thế (tất cả nhưng string)
- 20. MYSQL nhận được tất cả kết quả nhưng trước tiên
- 21. Django Xóa tất cả nhưng cuối cùng năm người queryset
- 22. Chọn Top (tất cả nhưng 10) từ ... trong Microsoft Access
- 23. MySQL XÓA tất cả nhưng bản ghi X mới nhất
- 24. xuất khẩu svn tất cả nhưng một số thư mục
- 25. Loại bỏ thẻ hình ảnh html và tất cả mọi thứ ở giữa từ một chuỗi
- 26. Xóa tất cả các bài viết, từ kết nối, v.v., từ một chuỗi trong Python
- 27. Áp dụng kiểu cho tất cả các hộp thoại (hộp thoại spinner, alertdialog, v.v.)
- 28. <img> và thẻ <image> trong HTML
- 29. vô hiệu hóa tất cả các yếu tố trong html
- 30. Trong jQuery, muốn xóa tất cả HTML bên trong div