Когда я вхожу в систему и меня перенаправляют на параметр 'next', к url автоматически добавляется слеш, делая его двойным слешем

Я создал представления в Django, которые используют LoginRequiredMixin. Однако, всякий раз, когда я вхожу в систему и должен быть перенаправлен на другой url, url, на который я перенаправлен, заканчивается несколькими косыми чертами вместо обычной 1 косой черты в конце django url. Одно из моих представлений:

class BookListView(LoginRequiredMixin, ListView):

    model = Book
    # paginate enables the list view to fetch a certain number of records per page. This is
    # useful when the records are plenty and it is not possible to display all in one page.
    paginate_by = 3 

Мой шаблон login.html:

{%extends 'catalog/base_generic.html'%}

{%block content%}

{%if form.errors %}
    <p>Your username and password didn't match. Please try again.</p>
{% endif %}

{%if next %}
    {% if user.is_authenticated %}
        <p>Your account doesn't have access to this page. To proceed,
            please login with an account that has access.
        </p>
    {% else %}
        <p>Please login to view this page.</p>
    {% endif %}
{% endif %}

<form method="POST", action="{% url 'login' %}">
    {% csrf_token %}
    <table>
        <tr>
            <td>{{form.username.label_tag}}</td>
            <td>{{form.username}}</td>
        </tr>
        <tr>
            <td>{{form.password.label_tag}}</td>
            <td>{{form.password}}</td>
        </tr>
    </table>
    <input type="submit" value="Login"/>
    <input type="hidden" name="next" value={{next}}/>
</form>

<P>
    <a href="{% url 'password_reset' %}">Forgot Password?</a>
</P>

{% endblock %}

Когда я просто вхожу в систему, все выглядит нормально: Страница входа

Однако после входа в систему происходит следующее: Сообщение об ошибке с несколькими косыми чертами в конце

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/catalog/books///
Using the URLconf defined in locallibrary.urls, Django tried these URL patterns, in this order:

admin/
catalog/ [name='index']
catalog/ books/ [name='books']
catalog/ book/<int:pk>/ [name='book-detail']
catalog/ authors/ [name='authors']
catalog/ author/<int:pk>/ [name='author-detail']
accounts/
^static/(?P<path>.*)$
The current path, catalog/books///, didn’t match any of these.

You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

Я не могу понять, что я делаю неправильно. Пожалуйста, помогите!

вы забыли несколько кавычек вокруг {{ next }}

измените его на

<input type="hidden" name="next" value="{{next}}"/>
#settings.py

APPEND_SLASH: bool = True # by default

Установка этого значения в False решит проблему лишней косой черты. Проверьте документацию; есть некоторые недостатки, если установить значение False в производстве.

Используйте модуль Doctests для отладки того, что вызывает проблему.

>>> from django.test import SimpleTestCase
>>> from django.test import Client
>>>
>>>
>>> class TestRedirect(SimpleTestCase):
...    """There is a good chance it will return redirect and 
...    and return 301 response; if APPEND_SLASH is causing the issue."""
>>>
>>>
>>>    def test_catalog_book(self):
...        client = Client()
...        response = client.get("/catalog/book/")
...        self.assertEqual(response.status_code, 301)

Прочитайте документацию по расширенному тестированию

>>> response = c.get('/redirect_me/', follow=True)
>>> response.redirect_chain
[('http://testserver/next/', 302), ('http://testserver/final/', 302)]
Вернуться на верх