Ссылка на проверку электронной почты в Django перенаправляет на последнюю страницу вместо заданного url

У меня есть сайт на django, где пользователь может выбрать "зарегистрироваться" на многих разных страницах с разными адресами. Я хочу, чтобы ссылка авторизации, которую они получают, возвращала их на страницу, на которой они были, а не на какую-то заданную страницу. У меня все устроено следующим образом: *** использование стандартного класса Abstract User

urls.py

urlpatterns = [
    path('signup/', SignUpView.as_view(), name='signup'),
    path('activate/<uid>/<token>/', ActivateAccount.as_view(), name='activate'),
]

***использование стандартного входа/регистрации django с пользовательскими шаблонами

registration/signup.html

{% extends 'gitrepo/base.html' %}

{% block title %}Sign Up{% endblock %}

{% block content %}
<h2>Sign Up</h2>
<p>Register using your username. <br>
You will be asked to verify your email.</p>
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  {% if request.GET.next %}
    <input type="hidden" name="next" value="{{ request.GET.next}}">
  {% endif %}
  <button type="submit">Sign Up</button>
</form>


<p><b>
  {% if messages %}
      {% for message in messages %}
          <div class="alert {% if message.tags %}alert-{{ message.tags }}{% endif %}" role="alert">{{ message }}</div>
      {% endfor %}
  {% endif %}
  </b></p>
  {% endblock %}

*** это запрашивает ldap для получения электронной почты пользователя в следующем

views.py

User = get_user_model()

class SignUpView(View):
    form_class = UserCreationForm
    template_name = 'registration/signup.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        uid = request.POST.get('username')
        if ldap_query_uid(uid):
            if form.is_valid():
                user = form.save(commit=False)
                user.is_active = False
                user.email = ldap_get_email(request.POST.get('username'))
                user.save()
                current_site = get_current_site(request)
                subject = 'Activate Your Kerneloscope Account'
                message = render_to_string('registration/account_activation_email.html', {
                    'user': user,
                    'domain': current_site.domain,
                    'uid': user.username,
                    'token': default_token_generator.make_token(user),
                    'next': request.POST.get('next')
                })
                user.email_user(subject, message)
                messages.success(request, ('An email has been sent to ' + user.email +
                                                    'Please confirm your email to complete registration.'))
                return redirect('login')
        else:
            messages.error(request, ('No user/email was found for username ' + uid + ' at redhat.com'))

        return render(request, self.template_name, {'form': form})


class ActivateAccount(View):

    def get(self, request, uid, token, *args, **kwargs):
        try:
            user = User.objects.get(username=uid)
        except (TypeError, ValueError, OverflowError, User.DoesNotExist):
            user = None
        print("please", request.GET.get('next'))
        if user is not None and default_token_generator.check_token(user, token):
            user.is_active = True
            user.profile.email_confirmed = True
            user.save()
            login(request, user)
            messages.success(request, ('Your account has been confirmed.'))
            return redirect('index')
        else:
            messages.warning(request, ('The confirmation link was invalid, possibly because it has already been used.'))
            return redirect('login')

acount_activation_email.html

{% autoescape off %}
Hi {{ user.username }},

Please click on the link below to confirm your registration:
{{ next }}
http://{{ domain }}{% url 'activate' uid=uid token=token %}
{% endautoescape %}

пример кода со страницы, вызывающей регистрацию

{% else %}
<p><b>
<a href="{% url 'login' %}?next={{request.path}}">Login</a> or
<a href="{% url 'signup' %}?next={{request.path}}">Sign Up</a> to comment
</b></p>
{% endif %}

В настоящее время у меня есть значение {{ next }}, которое успешно печатается в электронном письме (например, /pathname/specific_id_within_path ), на которое я хочу перенаправить. Однако я понятия не имею, как передать это значение в запрос, который формируется, когда пользователь нажимает на ссылку в письме активации.

Спасибо

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