Django no muestra el carácter de nueva línea al representar texto desde la base de datos

90

Estoy usando Django para el desarrollo, recuperando texto que contiene un carácter de nueva línea de la base de datos. Sin embargo, cuando lo renderizo en una plantilla usando una etiqueta de plantilla, no muestra el carácter de nueva línea.

¿Cuál es el problema?

Nazmul Hasan
fuente

Respuestas:

222

Debe recordar que sus plantillas producen HTML. En HTML, un carácter de nueva línea es solo otro espacio en blanco, no significa colocar el siguiente texto en una nueva línea. Hay varias formas de forzar nuevas líneas en HTML.

Puede envolver su texto con una <pre>etiqueta para que HTML entienda que está preformateado:

<pre>{{value}}</pre>

Puede usar filtros Django para convertir sus nuevas líneas de texto sin formato en HTML. linebreaksconvierte las líneas nuevas en <br>etiquetas y las líneas nuevas en <p>etiquetas. linebreaksbrsimplemente convierte las nuevas líneas en <br>etiquetas:

{{value|linebreaks}}
{{value|linebreaksbr}}

Puedes experimentar con estos para ver cuál te gusta más.

De lo contrario, puede usar la manipulación de cadenas en su vista para convertir su texto sin formato en HTML de la manera que más le convenga. Y si desea avanzar realmente, puede escribir su propio filtro que convierta de la manera que desee y usarlo en todas sus plantillas.

Ned Batchelder
fuente
30

No estoy seguro de haber entendido totalmente su pregunta, pero intente usar el filtro de saltos de línea.

{{ value|linebreaks }}
David
fuente
Esta debería ser la respuesta. usar <pre> </pre> es una mierda.
Rahul