2012-10-01 6 views
8

Ich benutze Flask in einer App, die einige Daten aus einer SQLite-Datenbank rendert. Mein Problem ist, wenn die App Text, der HTML hat, in Textform statt HTML ausgeben lässt. Zum Beispiel hat der Datensatz in der Datenbank den folgenden Text:Wie HTML-Inhalte mit Jinja mit Kolben Rendern?

My tailor <strong>is</strong> rich 

Die HTML-Seite machen wie:

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

Und, was ich will, ist dies („ist“ Wort kühner sein) :

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

Weiß jemand, wie kann ich das tun?

Antwort

26

Wenn Sie den Inhalt ist sicher wissen, verwenden Sie einfach den safe Filter:

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

Eine andere Möglichkeit ist jinja Markup-Klasse zu verwenden, sondern nur die Art und Weise sicher Filter der Fall ist. Dadurch können Sie HTML rendern, ohne Inhalt durch den sicheren Filter zu filtern. Im Folgenden finden Sie ein Beispiel dafür, wie dies erreicht werden kann.

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"))) 

Danach können Sie Ihre Funktion in dem Kolben jinja Globals, registrieren und von der jinja Vorlage verwenden.

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

Kein Safe in der Vorlage benötigt.

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

ich jemand in Fetzen während Code-Reviews reißen würde, wenn er eine Nachricht aufbaute, wie Sie in Ihrem ersten Beispiel :) – ThiefMaster

+0

Heh tun, nur ein etwas albernes Beispiel dafür, wie auch dümmer Zeichenfolge zu formatieren und richtig Flucht verwenden Funktion :) – Boris