Tôi đang xây dựng một quản trị viên cho Flask và SQLAlchemy và tôi muốn chuyển HTML cho các đầu vào khác nhau cho chế độ xem của mình bằng cách sử dụng render_template
. Khung khuôn mẫu dường như thoát khỏi html tự động, vì vậy tất cả < "'> được chuyển đổi thành tổ chức html. Làm thế nào tôi có thể vô hiệu hóa đó để HTML làm cho chính xác?Chuyển HTML sang mẫu bằng Flask/Jinja2
Trả lời
cách lý tưởng là để
{{ something|safe }}
. hơn hoàn toàn tắt tự động thoát
Bạn cũng có thể khai báo nó HTML an toàn từ mã:
from flask import Markup
value = Markup('<strong>The HTML String</strong>')
Sau đó vượt qua valu rằng e cho các mẫu và chúng không phải |safe
nó.
không đánh dấu tồn tại trong jinja2? – iamgopal
Đánh dấu là một lớp Jinja2, vâng. Nó thực hiện một giao diện phổ biến được hỗ trợ bởi nhiều thư viện python (tiếc là không Django). Bạn cũng có thể sử dụng gói đánh dấu an toàn thực hiện cùng một đối tượng: http://pypi.python.org/pypi/MarkupSafe –
Đây là cách tốt nhất để viết bộ lọc tùy chỉnh, khi bộ lọc phải chuyển một số đánh dấu cho mẫu. – erjiang
Từ các tài liệu jinja phần HTML Escaping:
Khi tự động thoát được kích hoạt tất cả mọi thứ được thoát theo mặc định trừ giá trị rõ ràng đánh dấu là an toàn. Đó có thể là được đánh dấu bằng ứng dụng hoặc trong mẫu bằng cách sử dụng bộ lọc | an toàn .
Ví dụ:
<div class="info">
{{data.email_content|safe}}
</div>
http://jinja.pocoo.org/docs/dev/templates/#html-escaping – Akairis
hi @Armin Ronacher, sẽ bạn vui lòng giải thích thêm và đưa ra một ví dụ? cảm ơn. – Samoth
Ý tôi là, ví dụ, tôi có một tệp có tên là 'userHome.html' và tôi muốn sử dụng' return render_template ('userHome.html') ', nhưng nó không hiển thị chính xác và tất cả chuyển thành thực thể ** html ** trong bảng điều khiển chrome của tôi. – Samoth
Trong thẻ 'trans', thẻ này phải được sử dụng như' {% trans something = something | safe%} A {{something}} B {% endtrans%} ' – Kangur