2014-10-12 76 views
1

我使用python markdown2模塊處理服務器上的字符串。如何使用jinja2顯示降價值?

marked_up = ' import sys\n print "hello there"' 
marked_up = unicode(markdown2.markdown(marked_up, extras=["fenced-code-blocks"])) 

然後,我通過的Jinja2傳遞值到客戶端:

template_value = {'marked_up': marked_up} 

template = JINJA_ENVIRONMENT.get_template('index.html') 
self.response.write(template.render(template_value)) 

在index.html的我嘗試顯示該標記的值:

<div class="row marketing" id="my_row_mark"> 

    {{ marked_up }} 

</div> 

的問題是文本顯示爲html屬性:

<pre><code>import sys print "hello there" </code></pre> 

我希望只看到:

import sys print "hello there" 

以markdown2應用適當的降價。

回答

4

TL; DR:

使用|safe過濾器,以防止自動讓你的內容轉義:

{{ marked_up|safe }} 



的Jinja2有一個名爲配置選項autoescape那d確定模板中的內容是否應自動爲HTML escaped

默認情況下(如果您使用純Jinja2)自動轉義禁用。但是,如果您使用集成Jinja2的框架,autoescape可能會啓用。

因此,啓用自動轉義功能後,您傳遞到模板中的任何內容都將被HTML轉義。注意,在這個例子中content將如何逃脫,這會導致你在渲染HTML看到HTML標籤:

example.py

from jinja2 import Environment, FileSystemLoader 

env = Environment(loader=FileSystemLoader('.'), 
        autoescape=True)    # <-- autoescaping enabled 

template = env.get_template('index.html') 
content = "<strong>bar</strong>" 
print template.render(content=content) 

index.html

<div> 
    {{ content }} 
</div> 

輸出:

<div> 
    &lt;strong&gt;bar&lt;/strong&gt; 
</div> 

現在可以prevent escaping for a particular variable使用|safe過濾器:

<div> 
    {{ content|safe }} 
</div> 

輸出:

<div> 
    <strong>bar</strong> 
</div> 

有關詳細信息,請參閱HTML escaping的文檔。