2011-08-08 11 views
12

Estoy manejando con un proyecto similar a Wikipedia. Puedo convertir el archivo de texto a código html usando el descuento. Mi problema es que quiero renderizar este código html en un archivo html. Aquí está mi código,Rendering HTML en web.py

class articles: 
    def GET(self): 
     form_name=web.input() 
     article_name=form_name.page 
     article_file_path=os.path.join('articles',article_name) 
     fp = open(article_file_path,'rU') 
     text = fp.read() 
     body = markdown2.markdown(text) 
     return render.article_files(article_name, body) 

estoy pasando article_name y el cuerpo (código html) para article_files.html. El cuerpo se ve así:

<h1>Hai</h1> 
<p>Welcome<em>Ajay</em></p> 

El problema es que el cuerpo se muestra como está. Ese es el código html que se imprime en la pantalla con todas las etiquetas. Quiero hacer que este código html (el cuerpo) como,

Hai
Bienvenido Ajay

Mi archivo HTML es:

$def with(title,content) 
<html> 
<head> 
<title>$title</title> 
</head> 
<body> 
    <form name="form" method="GET"> 
     $content 
    </form> 
</body> 
</html> 

Respuesta

11

escape HTML está activado por defecto en web. plantillas py Para desactivarlo, anteponer el nombre de variable con dos puntos:

<form name="form" method="GET"> 
    $:content 
</form> 

Asegúrese de que no hay forma de que un usuario malicioso potencial para alimentar HTML arbitrario en sus plantillas sin escape.

+0

Gracias Helgi. El código funciona muy bien ahora. –

2

Debe especificar el mime type de la fecha que está enviando al navegador, de lo contrario, no sabrá cómo mostrarlo.

Usted puede hacer esto mediante la adición de la following line a su función:

web.header('Content-Type', 'text/html') 
+1

Estoy bastante seguro de que Ajay está hablando de que _body_ (es decir, 'h1' y' p') se representan literalmente, no en toda la página. – Helgi

+0

No estoy seguro de por qué los votos a favor. Aunque solo el cuerpo no se haya renderizado, esto sigue siendo útil. Resolvió mi problema, votado. – sqram