Django não exibe caracteres de nova linha ao renderizar texto do banco de dados

90

Estou usando Django para desenvolvimento, recuperando algum texto contendo um caractere de nova linha do banco de dados. No entanto, quando eu o renderizo em um modelo usando uma tag de modelo, ele não mostra o caractere de nova linha.

Qual é o problema?

Nazmul Hasan
fonte

Respostas:

222

Você deve se lembrar de que seus modelos estão produzindo HTML. Em HTML, um caractere de nova linha é apenas outro espaço em branco, não significa colocar o texto a seguir em uma nova linha. Existem várias maneiras de forçar novas linhas em HTML.

Você pode envolver seu texto com uma <pre>tag para que o HTML entenda que está pré-formatado:

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

Você pode usar filtros do Django para converter suas novas linhas de texto simples em HTML. linebreakstransforma novas linhas simples em <br>marcas e novas linhas duplas em <p>marcas. linebreaksbrapenas transforma novas linhas em <br>tags:

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

Você pode experimentá-los para ver qual você gosta mais.

Caso contrário, você pode usar a manipulação de string em sua visualização para converter seu texto simples em HTML da maneira que mais lhe convier. E se você quiser realmente avançar, pode escrever seu próprio filtro que converte da maneira que você gosta e usá-lo em todos os seus modelos.

Ned Batchelder
fonte
30

Não tenho certeza se entendi totalmente sua pergunta, mas tente usar o filtro de quebra de linha.

{{ value|linebreaks }}
David
fonte
Esta deve ser a resposta. usar <pre> </pre> é apenas uma porcaria.
Rahul