python - NoReverseMatch mit Schlüsselwortargument uidb64 mit Django 2.0



python-3.x django-templates (1)

Ich kann nicht verstehen, warum mein Code nicht funktioniert. Früher hat es funktioniert, aber jetzt, wenn ich den Server starte und teste, funktioniert der Code nicht.

Wenn sich der Benutzer registriert, sende ich ihm eine Aktivierungs-E-Mail, wie folgt:

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

und meine URL-Datei

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

aber ich habe diesen fehler:

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

hebt diese Zeile hervor http://{{ domain }}{% url 'activate' uidb64=uid token=token %}


In Django 2.0 sollten Sie decode decode() nach der base64-Codierung der UID aufrufen, um sie in einen String zu konvertieren:

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

Weitere Informationen finden Sie im Hinweis in den Versionshinweisen zu Django 2.0 .





django-2.0