Текст ускользнул, когда я хочу, чтобы он отображался как html в Flask/jinja2
Я вытаскиваю фид из rss и сохраняю данные в appengine db. Содержимое RSS-ленты включает весь html. Поэтому у меня есть этот код python:
@app.route("/rssRead")
def pullRss():
feedItem = db.getFeedItemByName(request.args.get('title',None), request.args.get('key',None))
return render_template("rss.html", data= Markup(feedItem.html).unescape())
И мой шаблон html выглядит так:
{% extends "layout.html" %}
{% block body %}
{{ data }}
{% endblock %}
Итак, когда я просматриваю страницу, у меня отображается фактическая отображаемая html-разметка, как мне удалить данные html?
Ответы
Ответ 1
Вы должны использовать data=Markup(feedItem.html)
вместо data=Markup(feedItem.html).unescape()
.
Предполагая, что файл feedItem.html еще не был экранирован, unescape() здесь нечего делать и, следовательно, является бесполезным методом. Хуже того, он возвращает объект string/unicode вместо объекта Markup, давая Jinja2 никакого способа узнать, что экранирование необязательно во время рендеринга. Другими словами, использование unescape() здесь бесполезно загромождает как код python, так и код шаблона, и бесполезно подталкивает к поддерживающим шаблонов дополнительную ответственность за знание в специальном случае этого поля в своих шаблонах.
Ответ 2
Это тоже должно работать.
{% extends "layout.html" %}
{% block body %}
{{ data|safe }}
{% endblock %}