19

sqliteデータベースからいくつかのデータをレンダリングするアプリでFlaskを使用しています。私の問題は、アプリが内部にhtmlを含むテキストをレンダリングし、htmlではなくテキストとして表示される場合です。たとえば、データベースのレコードには次のテキストがあります。

My tailor <strong>is</strong> rich

htmlページはそのままレンダリングされます。

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

そして、私が欲しいのはこれです(「is」という言葉はもっと太字にする必要があります):

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

誰かが私がそれをどのように行うことができるか知っていますか?

4

2 に答える 2

46

コンテンツが安全であることがわかっている場合は、safeフィルターを使用するだけです。

{# In the Jinja template #}
{% for article in articles %}
<div class="article">{{article|safe}}</div>
{% endfor %}
于 2012-10-01T13:11:50.343 に答える
0

もう1つの可能性は、安全なフィルターと同じようにjinjaMarkupクラスを使用することです。これにより、安全なフィルターでコンテンツをフィルター処理せずに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>
于 2015-04-25T20:15:32.890 に答える