2012-07-03 25 views
5

La idea es la siguiente. Envío texto a jinja2 usando etiquetas similares a stackoverflow. ¿Cómo le digo a jinja2 que los trate como un marcado que contiene texto y para generar texto en negrita, cursiva y demás en html?jinja2 + reStructured Markup

Gracias.

Respuesta

3

Usted debe ser capaz de hacer esto:

from docutils.core import publish_string 
import jinja2 

html = publish_string(source=text, writer_name='html') 
node = jinja2.Markup(html) 

Dónde node es el nodo Jinja 2 que incluya realmente en su ámbito de aplicación.

+0

Gracias, trabajado. – DTailor

+0

¿Qué debo hacer si solo necesito la parte de sintaxis html? Puedo guardar ese estilo .css en otro archivo. – DTailor

+0

@DTailor: podría usar partes del html: http://docutils.sourceforge.net/docs/api/publisher.html#parts-provided-by-the-html-writer – Wolph

3

Estoy acostumbrado a django-markdown, así que creo que el uso de un filtro es una buena manera de lograr esto:

<div class="content">{{ article.body|rst }}</div> 

No estoy al tanto si existe tal filtro para Jinja2 pero it should be very easy to write. Supongo que algo en la línea de esto (código no probado):

from docutils.core import publish_parts 
import jinja2 

def rst_filter(s): 
    return jinja2.Markup(publish_parts(source=s, writer_name='html')['body']) 
environment.filters['rst'] = rst_filter 
+0

Esto funciona ... pero para filtrar , en lugar de publish_string() es mejor usar publish_parts() ['html_body']. ¡Gracias! –

+0

@AdiRoiban: te creo y quiero actualizar mi respuesta para reflejar tu sugerencia, pero ¿te importaría explicar el motivo por el cual publish_parts es mejor que publish_string? TIA. –

+0

Este sistema de comentarios es feo ... ¿cómo agrego el código? publish_string con el escritor "html" creará un _todo el documento HTML, incluido el encabezado, las guías de estilo y el cuerpo. Prueba esto: '' ' de docutils.core publish_string importación, publish_parts publish_string (fuente = 'primero', writer_name = 'html') publish_parts (fuente = 'primero', writer_name = 'html') ['body'] '' ' –