python - NoReverseMatch avec l'argument de mot-clé uidb64 avec Django 2.0



python-3.x django-templates (1)

Dans Django 2.0, vous devez appeler decode() après avoir encodé l’UID en base64, pour le convertir en chaîne:

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),
})

Voir la note dans les notes de publication de Django 2.0 pour plus d'informations.

Je ne comprends pas pourquoi mon code ne fonctionne pas. Avant, cela fonctionnait, mais maintenant, quand je lance le serveur et teste, le code ne fonctionne pas.

Lorsque l'utilisateur s'inscrit, je lui envoie un email d'activation, comme ceci:

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 %}

et mon fichier 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'),
.
.

mais j'ai cette erreur:

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})/$']

met en surbrillance cette ligne http://{{ domain }}{% url 'activate' uidb64=uid token=token %}





django-2.0