Django form scrubs blank spaces spaces

I have a model with a text field:

models.py

class Techtip(models.Model):
    title = models.CharField(max_length=150)
    year = models.PositiveIntegerField()
    year2 = models.PositiveIntegerField()
    make = models.CharField(max_length=30)
    model = models.CharField(max_length=30)
    description = models.TextField(max_length=10000)
    user = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
    date_created = models.DateTimeField(auto_now_add=True)
    date_revised = models.DateTimeField(null=True)
    additional_field = models.TextField(max_length=5000, null=True, blank=True)
    additional_field2 = models.TextField(max_length=5000, null=True, blank=True)
    image1 = models.ImageField(upload_to=user_directory_path, null=True, blank=True)
    image2 = models.ImageField(upload_to=user_directory_path, null=True, blank=True)
    image3 = models.ImageField(upload_to=user_directory_path, null=True, blank=True)

    def __str__(self):
        return self.title

If a create a Techtip and give it a description of:

"Hello, This is line one of the disctription.

This is line two.

and this is line 3."

When using {{techtip.deescription}} in the template I receive this:

"Hello, This is line one of the disctription. This is line two. and this is line 3."

However, if you bring up a form to edit the description, the spaces are there. It is also displayed correctly in the admin panel.

Here is the form:

forms.py
class TechtipFormModel(forms.ModelForm):
    """This form creates and edits techtips."""
    class Meta:
        model = Techtip
        fields = '__all__'
        exclude = ('user', 'date_revised', 'additional_field', 'additional_field2', 'image1', 'image2', 'image3')

    def __init__(self, *args, **kwargs):
        super(TechtipFormModel, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_id = 'id-TechtipForm'
        self.helper.form_method = 'post'
        self.helper.add_input(Submit('submit', 'Submit'))
        self.fields['description'].strip = False

Here are the views for editing a Techtip or displaying one. The spacing works correctly when using the edit form but not while displaying a Techtip.

views.py
@login_required
def techtip_detail(request, pk):
    # display techtip details. In template: if user is the creator of Techtip they can update/delete
    tech_id = pk
    user = request.user
    techtip = Techtip.objects.get(pk=tech_id)
    context = {'techtip': techtip}
    return render(request, 'techtips/view_techtip.html', context)


class TechtipEdit(LoginRequiredMixin,
                  UpdateView,):
    model = Techtip
    form_class = TechtipFormModel
    template_name = 'techtips/edit_techtip.html'

    def get_success_url(self):
        return reverse('manage_techtips')

    def dispatch(self, request, *args, **kwargs):
        # check for user logged in
        # check for user permission:
        # Take pk from kwargs
        pk = kwargs.get('pk')  # example
        # Take user from request
        user = request.user
        # check permission
        try:
            Techtip.objects.get(pk=pk, user=user)
            return super(TechtipEdit, self).dispatch(request, *args, **kwargs)
        except Techtip.DoesNotExist:
            return HttpResponse(status=403)

and here are the templates!

view_techtip.html
{% extends "techtips/base.html" %}
{% block body %}
<div class="row">
    <div class="col-md-12">
        <div class="container-fluid" align="left">
        <div id="punchlist">
           <h3 style="margin-bottom: 0px;">Title:</h3>{{ techtip.title }}<br>
            <h3 style="margin-bottom: 0px; margin-top: 20px;">Make:</h3> {{ techtip.make }}<br>
            <h3 style="margin-bottom: 0px; margin-top: 20px;">Model:</h3> {{ techtip.model }}<br>
            <h3 style="margin-bottom: 0px; margin-top: 20px;">Beginning Year:</h3> {{ techtip.year }}<br>
            <h3 style="margin-bottom: 0px; margin-top: 20px;">Ending Year:</h3> {{ techtip.year2 }}<br>
            <h3 style="margin-bottom: 0px; margin-top: 20px;">Description:</h3> {{ techtip.description }}<br>
        </div>
        </div>
    </div>
</div>
{% if techtip.user.id == user.pk or request.user.is_superuser == TRUE %}
<br>
<form method="GET" action="{% url 'edit_techtip' techtip.pk %}">
    <span class="techtip-button-1">
        <button type="submit"  value="EDIT">Edit</button>
    </span>
</form>
{% endif %}
{% if request.user.is_superuser == TRUE %}
<form method="POST" action="{% url 'delete_techtip' techtip.pk %}">
    {% csrf_token %}
    <span class="techtip-button-1">
        <button type="submit"  value="DELETE">Delete</button>
    </span>
</form>
{% endif %}
<br><br>
<br>
{% if techtip.user.id != user.pk %}
Author: {{techtip.user}}
{% endif %}
{% if techtip.user.id == user.pk %}
Author: You
{% endif %}
{% endblock %}

and

edit_techtip.html
{% extends 'techtips/base.html' %}
{% block body %}
{% load crispy_forms_tags %}
{% crispy form form.helper %}
{% endblock %}

Thanks in advance!

I did some research and added

self.fields['description'].strip = False

to the form class but then later realized that wouldn't help because this form class has no part of passing an object into the template and using Django template language.

Back to Top