Django nie wyświetla znaku nowej linii podczas renderowania tekstu z bazy danych

90

Używam Django do programowania, pobierając tekst zawierający znak nowego wiersza z bazy danych. Jednak kiedy renderuję go do szablonu za pomocą tagu template, nie pokazuje on znaku nowej linii.

Jaki jest problem?

Nazmul Hasan
źródło

Odpowiedzi:

222

Musisz pamiętać, że Twoje szablony generują HTML. W HTML znak nowej linii jest po prostu kolejną spacją, nie oznacza to umieszczenia następującego tekstu w nowej linii. Istnieje wiele sposobów wymuszenia nowych wierszy w HTML.

Możesz owinąć tekst <pre>tagiem, aby kod HTML zrozumiał, że jest wstępnie sformatowany:

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

Możesz użyć filtrów Django, aby przekonwertować znaki nowej linii w postaci zwykłego tekstu na HTML. linebreakszamienia pojedyncze <br>znaki nowej linii w znaczniki, a podwójne <p>znaki nowej linii w znaczniki. linebreaksbrpo prostu zamienia <br>znaki nowej linii w tagi:

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

Możesz eksperymentować z nimi, aby zobaczyć, które lubisz bardziej.

Jeśli to się nie uda, możesz użyć manipulacji ciągami znaków w swoim widoku, aby przekonwertować zwykły tekst na HTML w sposób, który bardziej Ci odpowiada. A jeśli chcesz być naprawdę zaawansowany, możesz napisać własny filtr, który konwertuje tak, jak lubisz, i używać go w swoich szablonach.

Ned Batchelder
źródło
30

Nie jestem pewien, czy całkowicie rozumiem Twoje pytanie, ale spróbuj użyć filtra podziałów wierszy.

{{ value|linebreaks }}
David
źródło
To powinna być odpowiedź. używanie <pre> </pre> to po prostu bzdura.
Rahul