Jinja renderizar texto en HTML conservando saltos de línea.

Tengo una forma simple como esta:

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

Grabo los datos en tres párrafos así:

 para1 para2 para3 

En la plantilla, me gustaría ver el contenido de ese registro en solo lectura. (Forma no editable)

Se registra en este caso el modelo que contiene los datos:

 {{ record.notes }} 

->

 para1 para2 para3 

¿Qué puedo hacer para que se muestren las multilíneas?

Todos los espacios en blanco, incluidas las nuevas líneas, se convierten en un único espacio en HTML.

Sus opciones, de mejor a peor:

  1. Poner white-space: pre-wrap; en el elemento que contiene. Esto le dice a HTML que muestre todos los espacios en blanco exactamente como aparecen en la fuente, incluidas las nuevas líneas. (También puede usar una etiqueta
    
    

    , pero eso también deshabilitará el ajuste de palabras, lo que probablemente no desee).

  2. Trate el texto plano como Markdown y lance un procesador Markdown, una de las cosas que hace Markdown es ajustar párrafos en

    .

  3. En Python-land, haga .replace('\n', '
    ')
    . Pero esto te deja vulnerable a XSS porque podría haber otros elementos no deseados similares a HTML en la cadena, y corregir eso es un poco molesto.

¿Qué tal almacenar sus datos con la etiqueta

 para1 
para2
para3