Подтвердить что ты не робот

Текст ускользнул, когда я хочу, чтобы он отображался как 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?

4b9b3361

Ответ 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 %}