Dajngo: Как перенаправить пользователя на прошлую страницу после регистрации?

Для покупки товара есть 4 шага. Если пользователь не зарегистрирован, то после второго шага его должно перенаправить на страницу регистрации. А когда он зарегистрируется, то его должно перенести на третий шаг. Как можно реализовать данную логику? (В моем случае после регистрации его переносит на главную страницу, а должно на третий шаг) Шаги покупки

views.py ( Это обработчик второго шага )

class NewTrackingSubscriptions(DataMixin, TemplateView):
    template_name = 'profiles/new-tracking-subscription.html'

    def get(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return redirect('login_user')
        return render(request, 'profiles/new-tracking-subscription.html', self.get_context_data())

views.py ( Это обработчик регистрации пользователя )

class SignupUser(CreateView):
    form_class = RegisterForm
    template_name = 'account/signup.html'

    def form_valid(self, form):
        user = CustomUser.objects.create_user(email=self.request.POST['email'],
                                              first_name=self.request.POST['first_name'],
                                              last_name=self.request.POST['last_name'],
                                              password=self.request.POST['password'])
        user.save()
        login(self.request, user)

        return redirect('index')

В контексте для формы регистрации передавайте параметр return_to_url любым из способов.

В форме добавьте поле

<input type="hidden" name="return_to" value="{{ return_to_url }}">

Либо можно поступить даже вот так:

<input type="hidden" name="return_to"  value="{{ request.META.HTTP_REFERER }}">

В таком случае будет возвращаться всегда на тут страницу, с которой форма была вызвана. Учтите, что если например форма окажется не валидной хотя бы раз - редирект будет на саму форму. Так что лучше первый способ с "ручной" передачей контекста.

Тогда у Вас будет такая views:

class SignupUser(CreateView):
    form_class = RegisterForm
    template_name = 'account/signup.html'

    def form_valid(self, form):
        user = CustomUser.objects.create_user(email=self.request.POST['email'],
                                              first_name=self.request.POST['first_name'],
                                              last_name=self.request.POST['last_name'],
                                              password=self.request.POST['password'])
        user.save()
        login(self.request, user)

        return redirect(request.POST['return_to']))
Вернуться на верх