Текст исчез, когда я хочу, чтобы он отображался как HTML в Flask / jinja2 - PullRequest
23 голосов
/ 06 апреля 2011

Я извлекаю канал из rss и сохраняю данные в базе данных appengine.Содержание 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-данные?

Ответы [ 2 ]

98 голосов
/ 07 апреля 2011

Это тоже должно работать.

{% extends "layout.html" %}
{% block body %}
{{ data|safe }}
{% endblock %}
12 голосов
/ 07 апреля 2011

Вы должны использовать data=Markup(feedItem.html) вместо data=Markup(feedItem.html).unescape().Это будет делать правильно, и ваш шаблон будет чистым.

Вызов unescape () здесь не имеет смысла (если только feeditem.html не содержит предварительно экранированный html, чего, вероятно, нет).Что еще более важно, это мешает способности Jinja2 распознавать это поле как html, которое необходимо экранировать, создавая объект string / unicode вместо объекта Markup.Вы фактически отказываетесь от способности Jinja2 обрабатывать экранирование автоматически (такова цель класса Markup!) И вместо этого заставляете своих будущих разработчиков шаблонов помнить, что это поле требует экранирования вручную, и загромождать код шаблона дополнительным вызовом, чтобы сделать это..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...