I enter text into a form using textarea (line breaks are important):

First line

Second line

Third row

However, when django generates, it is obtained in the form:

First line Second line Third line

How to fix?

# workouts/urls.py from django.conf.urls import url from .views import AddWorkoutView from .views import WorkoutsListView app_name = 'workouts' urlpatterns = [ url(r'^add$', AddWorkoutView.as_view(), name="add_workout"), url(r'^list$', WorkoutsListView.as_view(), name="workouts_list"), ] # workouts/views.py from django.views.generic import FormView, ListView from .forms import AddWorkoutForm from .models import Workout class AddWorkoutView(FormView): template_name = "workouts/add_workout.html" form_class = AddWorkoutForm success_url = '/success' def form_valid(self, form): form.handle_valid_form() return super(AddWorkoutView, self).form_valid(form) class WorkoutsListView(ListView): model = Workout template_name = "workouts/workouts_list.html" def get_context_data(self, **kwargs): context = super(WorkoutsListView, self).get_context_data(**kwargs) context['workout'] = self.model return context # workouts/models.py from django.db import models from django.db.models import CharField class Workout(models.Model): workout_text = CharField(max_length=500) def __str__(self): return self.workout_text # workouts/forms.py class AddWorkoutForm(forms.Form): workout_text = forms.CharField(max_length=500, widget=forms.Textarea) def handle_valid_form(self): workout_text = self.cleaned_data['workout_text'] new_workout = Workout.objects.create(workout_text=workout_text) new_workout.save() <!--add_workout.html--> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Добавление тренировки</title> </head> <body> <form method="post" action="{% url "workouts:add_workout" %}"> {% csrf_token %} {{ form }} <br> <input type="submit" value="Отправить"> </form> </body> </html> <!--workouts_list.html--> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Тренировки</title> </head> <body> <h1>Тренировки</h1> <ul> {% for workout in object_list %} <li>{{ workout.workout_text }}</li> {% empty %} <li>Тренировок еще не было</li> {% endfor %} </ul> </body> </html> 
  • in the output, replace the line breaks on <br/> . - Arnial

1 answer 1

You can use the linebreaks filter

 {{ workout.workout_text|linebreaks }}