2012-10-01 117 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