Django n'affiche pas le caractère de nouvelle ligne lors du rendu du texte à partir de la base de données

90

J'utilise Django pour le développement, récupérant du texte contenant un caractère de nouvelle ligne de la base de données. Cependant, lorsque je le rend dans un modèle à l'aide d'une balise de modèle, il n'affiche pas le caractère de nouvelle ligne.

Quel est le problème?

Nazmul Hasan
la source

Réponses:

222

Vous devez vous rappeler que vos modèles produisent du HTML. En HTML, un caractère de nouvelle ligne n'est qu'un autre espace blanc, cela ne signifie pas mettre le texte suivant sur une nouvelle ligne. Il existe plusieurs façons de forcer de nouvelles lignes en HTML.

Vous pouvez envelopper votre texte avec une <pre>balise afin que HTML comprenne qu'il est préformaté:

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

Vous pouvez utiliser les filtres Django pour convertir vos nouvelles lignes de texte brut en HTML. linebreakstransforme les nouvelles lignes simples en <br>balises et les doubles nouvelles lignes en <p>balises. linebreaksbrtransforme simplement les nouvelles lignes en <br>balises:

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

Vous pouvez les expérimenter pour voir ce que vous préférez.

À défaut, vous pouvez utiliser la manipulation de chaînes dans votre vue pour convertir votre texte brut en HTML d'une manière qui vous convient mieux. Et si vous voulez devenir vraiment avancé, vous pouvez écrire votre propre filtre qui convertit comme vous le souhaitez et l'utiliser dans tous vos modèles.

Ned Batchelder
la source
30

Je ne sais pas si je comprends parfaitement votre question, mais essayez d'utiliser le filtre de sauts de ligne.

{{ value|linebreaks }}
David
la source
Cela devrait être la réponse. utiliser <pre> </pre> est juste de la merde.
Rahul