2012-07-03 3 views
5

L'idea è la seguente. Invio del testo a jinja2 usando tag simili a StackOverflow. Come faccio a dire a jinja2 di trattarli come un markup contenente testo e generare testo in grassetto, in corsivo e così via in html?jinja2 + ReStructured Markup

Grazie.

risposta

3

Si dovrebbe essere in grado di fare questo:

from docutils.core import publish_string 
import jinja2 

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

Dove node è il nodo Jinja 2 per includere realmente nella vostra portata.

+0

Grazie, ha funzionato. – DTailor

+0

Cosa devo fare se ho bisogno solo della parte della sintassi html? Posso mettere quello stile .css in un altro file. – DTailor

+0

@DTailor: potresti usare parti del codice html: http://docutils.sourceforge.net/docs/api/publisher.html#parts-provided-by-the-html-writer – Wolph

3

Sono abituato a django-markdown, quindi penso che utilizzando un filtro è un bel modo per ottenere questo risultato:

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

io non sono a conoscenza se esiste tale filtro per Jinja2 ma it should be very easy to write. Immagino qualcosa nella riga di questo (codice non testato):

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

Funziona ... ma per filtro , invece di publish_string() è meglio usare publish_parts() ['html_body']. Grazie! –

+0

@AdiRoiban: ti credo e voglio aggiornare la mia risposta per riflettere il tuo suggerimento, ma ti dispiacerebbe spiegare il motivo per cui publish_parts è meglio di publish_string? TIA. –

+0

Questo sistema di commenti è brutto ... come posso aggiungere il codice? publish_string con lo scrittore "html" creerà un _whole_ documento HTML, inclusi head, styleguides e body. Prova questo: '' ' da docutils.core importazione publish_string, publish_parts publish_string (fonte = 'prima', writer_name = 'html') publish_parts (fonte = 'prima', writer_name = 'html') ['body'] '' ' –