2012-10-01 79 views
8

我在一个从sqlite数据库渲染一些数据的应用程序中使用Flask。我的问题是,当应用程序呈现一些内部具有HTML的文本,显示为文本而不是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> 

有没有人知道我该怎么做?

回答

26

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

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

另一种可能性是使用神社标记类,只是安全过滤器的方式做。这将允许您在不通过安全筛选器筛选内容的情况下呈现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"))) 

在这之后,你可以注册在烧瓶神社全局的功能,并从神社模板中使用它。

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

模板中没有安全需要。

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

在代码审查,我会撕裂人撕成碎片,如果他建造了类似的消息在您的第一个例子做:) – ThiefMaster

+0

嘿,只是一个如何愚蠢甚至字符串格式有点傻的例子,并正确使用逃生功能:) – Boris