NoReverseMatch с ключевым словом argument uidb64 с Django 2.0
Я не могу понять, почему мой код не работает. Раньше это работало, но теперь, когда я запускаю сервер и тестирую, код не работает.
когда пользователь регистрируется, я отправляю ему письмо активации, например:
def send_activation_email(serializer, request, user):
current_site = get_current_site(request)
message = render_to_string('acc_active_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
mail_subject = 'Activate your blog account.'
to_email = serializer.data['email']
email = EmailMessage(mail_subject, message, to=[to_email])
email.send()
acc_active_email.HTML-код
{% autoescape off %}
Hi {{ user.username }},
Please click on the link to confirm your registration,
http://{{ domain }}{% url 'activate' uidb64=uid token=token %}
{% endautoescape %}
и мой url-файл
.
.
url(r'^activate/(?P<uidb64>[0-9A-Za-z_-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
views.activate_account, name='activate'),
.
.
но у меня есть эта ошибка:
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'activate' with keyword arguments '{'uidb64': b'NDM', 'token': '4qz-8f770502bd8b02786da9'}' not found. 1 pattern(s) tried: ['activate/(?P<uidb64>[0-9A-Za-z_-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$']
выделяет эту строку http://{{ domain }}{% url 'activate' uidb64=uid token=token %}
1 ответов
в Django 2.0 вы должны позвонить decode()
после кодирования base64 uid, чтобы преобразовать его в строку:
message = render_to_string('acc_active_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
'token': account_activation_token.make_token(user),
})
см. Примечание В разделе примечания к выпуску Django 2.0 для получения дополнительной информации.