如何使用烧瓶使用jinja呈现html内容?

时间:2012-10-01 11:33:43

标签: flask jinja2

我在一个应用程序中使用Flask,该应用程序从sqlite数据库中呈现一些数据。我的问题是当应用程序渲染一些内部有html的文本时,显示为文本而不是html。例如,数据库中的记录具有以下文本:

My tailor <strong>is</strong> rich

html页面按原样呈现:

<html>
<!-- snip .... -->
My tailor &gt;strong&lt;is&gt;/strong&lt; rich
<!-- snip .... -->
</html>

而且,我想要的是这个(“是”字必须更大胆):

<html>
<!-- snip .... -->
My tailor <strong>is</strong> rich
<!-- snip .... -->
</html>

有人知道我该怎么办?

2 个答案:

答案 0 :(得分:31)

如果您知道内容安全,只需使用safe过滤器:

{# In the Jinja template #}
{% for article in articles %}
<div class="article">{{article|safe}}</div>
{% endfor %}

答案 1 :(得分:0)

另一种可能性是使用jinja Markup类,就像安全过滤器一样。这将允许您呈现HTML而不通过安全过滤器过滤内容。以下是如何实现这一目标的一个例子。

from jinja2 import Markup, escape

def render_markup():
    return Markup("{0}{1}{2}{3}{4}".format(
        escape("My tailor "), 
        "<strong>", 
        escape("is"), 
        "</strong>", 
        escape(" rich")))

在此之后,您可以在Flask jinja全局中注册您的函数,并从jinja模板中使用它。

app.jinja_env.globals["render_markup"] = render_markup

模板中无需安全。

<html>
<!-- snip .... -->
{{ render_markup() }}
<!-- snip .... -->
</html>