Django v3 NoReverseMatch в /signup/
У меня ошибка после регистрации:
Поиск для 'activateuser' с ключевыми аргументами '{'uidb64': 'NzA', 'token': 'ar65ve-0c2f1aa20521539b574c02e5a6844f5'}' не найден. Проверен 1 шаблон(ы): ['activateuser/$']
мой url:
...
path('signup/', accounts.views.signupuser, name='signupuser'),
url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', ...
Мое мнение:
def signupuser(request):
if request.user.is_authenticated:
return redirect('/charts/drawchart/v1/metrics/addresses/active_count/')
else:
form = SignUpForm()
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
current_site = get_current_site(request)
mail_subject = 'Activate your blog account.'
message = render_to_string('accounts/activate_account_mail.html', {
'user': user,
'domain': current_site.domain,
'uid':urlsafe_base64_encode(force_bytes(user.pk)),
'token':account_activation_token.make_token(user),
})
to_email = form.cleaned_data.get('email')
email = EmailMessage(
mail_subject, message, to=[to_email]
)
email.send()
return redirect('loginuser')
else:
return render(request, 'accounts/signup.html', {'form': form})
else:
return render(request, 'accounts/signup.html', {'form': form})
def activateuser(request, uidb64, token):
try:
uid = urlsafe_base64_decode(uidb64)
user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.save()
login(request, user)
context = {'uidb64':uidb64, 'token':token}
return render(request, '/charts/drawchart/v1/metrics/addresses/active_count/', context)
else:
return HttpResponse('Activation link is invalid!')
и, наконец, мой шаблон:
{% autoescape off %}
Hi {{ user.username }},
Please click on the link to confirm your registration,
http://{{ domain }}{% url 'activateuser' uidb64=uid token=token %}
{% endautoescape %}
Ваш URL для второго пути должен начинаться с re_path
, а не с url
. Он не определяется как путь.