2012-10-01 42 views
8

Estoy usando Flask en una aplicación que representa algunos datos de una base de datos sqlite. Mi problema es cuando la aplicación muestra texto que tiene html adentro, aparece como texto en lugar de html. Por ejemplo, el registro en la base de datos tiene el siguiente texto:¿Cómo se procesa el contenido html con jinja usando el matraz?

My tailor <strong>is</strong> rich 

La página HTML render como es:

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

Y, lo que quiero es esto ("es" palabra tiene que ser más audaz) :

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

¿Alguien sabe cómo puedo hacer eso?

Respuesta

26

Si conoce el contenido es segura, basta con utilizar el filtro safe:

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

Otra posibilidad es utilizar la clase de jinja de marcado, tal y como filtro de seguridad hace. Esto le permitirá procesar HTML sin filtrar el contenido a través del filtro seguro. A continuación se muestra un ejemplo de cómo se puede lograr esto.

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

Después de esto usted puede registrar su función en las variables globales Frasco Jinja, y el uso de la plantilla de jinja.

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

No es necesario seguro en la plantilla.

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

Me rasgar cualquier persona en pedazos durante las revisiones de código si se estaba construyendo un mensaje como lo hace en su primer ejemplo :) – ThiefMaster

+0

Je, sólo un ejemplo un tanto tonto de cómo dar formato a la cadena aún más tonto, y utilizar adecuadamente de escape función :) – Boris

Cuestiones relacionadas