Как управлять перенаправлением на следующую страницу после входа в систему в Django

Я новичок в django и хотел протестировать миксины, требующие логин, и перенаправление на next_urls. Вход в систему работает нормально, но после входа в систему происходит переход на индексную страницу, а не на ту, которую пользователь хотел посетить. Например, если это url

http://localhost:8000/post/login/?next=/post/1/

После входа в систему перенаправляет на эту ссылку

http://localhost:8000/post/

Вот фрагмент

views.py

def loginUser(request):
    if request.method == 'POST':
        form = Login(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                next_url = request.GET.get('next', None)
                post_id = request.GET.get('post_id', None)
                print("Next URL:", next_url)
                print("Post ID:", post_id)
                if next_url:
                    return HttpResponseRedirect(next_url)
                else:
                    return redirect('posts:posts-index')
    else:
        form = Login()
    return render(request, 'posts/login.html', {'form': form})

class Content(LoginRequiredMixin, DetailView):
    template_name = 'posts/post.html'
    context_object_name = 'post'
    login_url = 'login/'

    def handle_no_permission(self):
        if not self.request.user.is_authenticated:
            post_id = self.kwargs.get('pk', None)
            next_url = reverse('posts:posts-content', kwargs={'pk': post_id})
            return redirect(reverse('posts:loginUser') + '?next=' + next_url + '&post_id=' + str(post_id))
        return super().handle_no_permission()

    model = Post
```


urls.py
```
app_name = 'posts'
urlpatterns = [
    path('', Index.as_view(), name='posts-index'),
    path('<int:pk>/', Content.as_view(), name='posts-content'),
    path('register/', register, name='register'),
    path('login/', loginUser, name='loginUser'),
    path('logout/', logoutUser, name='logoutUser'),
    path('profile/', profile, name='profile')
]
```

and my login.html
```
    {% extends 'posts/base.html' %}
    {% block title %}
       Sign Up
     {% endblock %}
     {% block content %}
<form action="{% url 'posts:loginUser' %}{% if next %}?next={{ next }}{% endif %}" method="post">
        {% csrf_token %}
        {{form}}
        <button type="submit">Login</button>
    </form>
{% endblock %}
```


I tried printing the url_next value but i keep getting none.I also tried adding

```
<form method="post" action="{% url 'posts:loginUser' %}" >
        {% csrf_token %}
        {{form}}
        <input type="hidden" name="next" value="{{next}}" />
        <button type="submit">Login</button>
    </form>
```

Не делайте ничего в UI, т.е. на страницах html-шаблона, поскольку информация уже есть в URL: в loginUser

def loginUser(request):
    nextpage = request.GET.get("next", None)
    if nextpage:
        return redirect(nextpage)

это все, что вам нужно сделать.

также добавьте это в форму, если она не работает без этого

<input type="hidden" name="next" value="{{ next }}">

Для получения дополнительной информации обратитесь к документации

Вернуться на верх