Ich verwende eine Django REST Framework API, um von meinem AngularJS-Frontend zum Django-Backend zu kommunizieren, das wirklich gut funktioniert. Ich habe das super-hilfreiche django-rest-auth-Paket sowie deren optionale Registrierung installiert. Authentifizierung funktioniert, und Registrierung funktioniert meistens auch.Django REST Auth: Fehler Rendering Django-Allauth Vorlage nach Bestätigung der E-Mail
Mein Problem ist, dass der Bestätigungslink in der Bestätigungs-E-Mail, die an den neuen Benutzer gesendet wird, mir einen NoReverseMatch-Fehler gibt. Dank der django-rest-auth FAQ, weiß ich, dass die Bestätigung nicht standardmäßig funktioniert und überschrieben werden muss, aber ich habe gespiegelt, was das Poster von this Frage getan hat. Mein Urls:
from allauth.account.views import confirm_email as allauthemailconfirmation
...
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^rest-auth/registration/account-confirm-email/(?P<key>\w+)/$', allauthemailconfirmation, name="account_confirm_email"),
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
...
und die genauen Fehler:
NoReverseMatch at /rest-auth/registration/account-confirm-email/ahhuvpetqmcsd6hjlgrjuru11mwfkpk9sljmfbuprxwz8elnajabr84vusnmdw7r/
Reverse for 'account_email' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Das Plakat von this Frage scheint das gleiche Problem gehabt zu haben, obwohl ich verstehe nicht, wie die eine Antwort gilt, und es ist nicht akzeptiert, also bin ich mir nicht sicher, ob es überhaupt funktioniert.
EDIT:
Basierend auf dem ersten Kommentar unten, habe ich versucht, den URL-Namen zu account_email
ändern. Dies führte immer noch zu einem Fehler, aber nach dem Fehler wieder zu lesen, erkennen ich, es während django-allauth
Vorlage eines Standard macht geworfen, nachdem die allauth Ansicht, welche die Bestätigung behandelt hat:
Error during template rendering
In template C:\Python34\lib\site-packages\allauth\templates\base.html, error at line 26
Reverse for 'account_email' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
16 <li>{{message}}</li>
17 {% endfor %}
18 </ul>
19 </div>
20 {% endif %}
21
22 <div>
23 <strong>Menu:</strong>
24 <ul>
25 {% if user.is_authenticated %}
26
<li><a href="
{% url 'account_email' %}
">Change E-mail</a></li>
27 <li><a href="{% url 'account_logout' %}">Sign Out</a></li>
28 {% else %}
29 <li><a href="{% url 'account_login' %}">Sign In</a></li>
30 <li><a href="{% url 'account_signup' %}">Sign Up</a></li>
31 {% endif %}
32 </ul>
33 </div>
34 {% block content %}
35 {% endblock %}
36 {% endblock %}
Ich denke also, den Code, den ich verwenden, Das Problem mit dem verknüpften GitHub ist für die Bestätigungs-E-Mail korrekt. Dieser Fehler tritt beim Rendern der Vorlage auf, nachdem die Allauth-Ansicht die E-Mail-Adresse bestätigt. Ich würde erwarten, dass die URLs in den Zeilen 26-30 oben Teil des include('rest_auth.registration.urls')
Sets sind, da die django-rest-auth Registrierungsoption django-allauth verwendet.
Ich bin mir nicht sicher, was ich tun müsste, damit diese URL funktioniert, wenn die allauth-Ansicht die Bestätigung korrekt verarbeitet. Ich könnte mich bei dieser Vermutung jedoch irren.
EDIT 2 nahm ich den Rat von einem Kommentar unten und alle URLs ausgedruckt:
jetzt>>> show_urls(urls.urlpatterns)
^api/
^$
^\.(?P<format>[a-z0-9]+)/?$
....autogenerated viewset URLs....
^api-browse/
^login/$
^logout/$
^rest-auth/
^password/reset/$
^password/reset/confirm/$
^login/$
^logout/$
^user/$
^password/change/$
^rest-auth/registration/account-confirm-email/(?P<key>[-:\w]+)/$
^rest-auth/registration/
^$
^verify-email/$
^account-confirm-email/(?P<key>\w+)/$
^$
....explicitly added URLs for custom viewset methods...
^register/$
^login/$
^logout$
^admin/
....admin URLs....
Der NoReverseMatch
Fehler macht Sinn, da die URL-Muster auf der allauth Ansicht bestätigen E-Mail einfach aren nicht anwesend.
ich in der verknüpften Frage Stackoverflow festgestellt, dass das Plakat als so die allauth Urls aufgenommen hatte:
url(r'^accounts/', include('allauth.urls')),
Wenn ich diese Zeile hinzugefügt, es funktionierte!
Ist es nicht nur ein Tippfehler? In eror sagt es: Reverse für 'account_email' und Sie haben dies in URL name = "account_confirm_email", können Sie versuchen, mit demselben Namen in URL? –
Danke für die Idee - ich denke, es sollte "account_confirm_email" sein und dass diese NoReverseMatch von einer URL auf einer grundlegenden Django-Allauth-Vorlage kommt, die keine Umkehrung hat. Ich habe einige Details zum ursprünglichen Post hinzugefügt, der das alles beschreibt – dkhaupt
Ich verstehe nicht, warum Sie den Fehler erhalten, aber ich kann eine andere Idee geben, dies zu debuggen, überprüfen Sie URL-Muster über den Befehl show_urls. Dieser Befehl ist verfügbar, wenn Sie [django-extenstions] installieren (http://django-extensions.readthedocs.io) –