2013-09-06 12 views
10

Ho una forma semplice come questo:Flask: come rendere il linebreak nel template?

class RecordForm(Form):  
    notes = TextAreaField('Notes') 

mi registrare i dati in tre paragrafi come questo:

para1 

para2 

para3 

Nel modello vorrei vedere il contenuto di tale record in sola lettura solo. (Non modificabile forma)

record è questo caso il modello contenente i dati:

<td>{{ record.notes }}</td> 

->

<td>para1 para2 para3</td> 

Che cosa posso fare per farlo per mostrare le linee multiple?

risposta

19

tutti gli spazi, tra cui a capo, si trasforma in un unico spazio in HTML.

le opzioni, dal migliore al peggiore:

  1. Ponga white-space: pre-wrap; sull'elemento che contiene. Questo dice all'HTML di mostrare tutti gli spazi bianchi esattamente come appare nella sorgente, incluse le nuove linee. (Puoi anche usare un tag <pre>, ma anche disabilitare il word-wrapping, che probabilmente non vuoi.)
  2. Tratta il testo semplice come Markdown e getta un processore Markdown su di esso, una delle cose che Markdown fa è inserire i paragrafi in <p>.
  3. In Python-land, fare .replace('\n', '<br>'). Ma questo ti rende vulnerabile a XSS perché potrebbe esserci un'altra roba simile a HTML nella stringa, e risolvere il problema è un po 'un problema.
-1

come circa memorizzare i dati con tag <br/>

para1 
<br/> 
para2 
<br/> 
para3 
+0

Ma quando la textarea sta salvando i dati sul modello, sicuramente li sta aggiungendo. Ci deve essere un modo migliore per mostrare le multi-linee. – Houman

Problemi correlati