2010-07-08 44 views
86

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

177

cách lý tưởng là để

{{ something|safe }} 

. hơn hoàn toàn tắt tự động thoát

+0

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

+0

Ý 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

+0

Trong thẻ 'trans', thẻ này phải được sử dụng như' {% trans something = something | safe%} A {{something}} B {% endtrans%} ' – Kangur

70

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ó.

+0

không đánh dấu tồn tại trong jinja2? – iamgopal

+3

Đá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 –

+0

Đâ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

7

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> 
+1

http://jinja.pocoo.org/docs/dev/templates/#html-escaping – Akairis