我正在使用Django REST框架API从我的AngularJS前端与Django后端进行通信,这非常有效。我安装了超级有用的django-rest-auth软件包以及它们的可选注册附件。身份验证的作品,并且大多数注册也可以。Django REST身份验证:错误呈现电子邮件确认后的django-allauth模板
我的问题是发送给新用户的确认电子邮件中的确认链接给我一个NoReverseMatch错误。感谢django-rest-auth FAQ,我知道这个确认在默认情况下不起作用,并且需要重写,但是我反映了this问题的发布者做了什么。我的网址:
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')),
...
以及确切的错误:
NoReverseMatch at /rest-auth/registration/account-confirm-email/ahhuvpetqmcsd6hjlgrjuru11mwfkpk9sljmfbuprxwz8elnajabr84vusnmdw7r/
Reverse for 'account_email' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
的this问题的海报似乎也有同样的问题,但我不明白的一个答案如何适用,它不是接受,所以我不确定它是否可行。
编辑:
基于第一注释下,我试图改变URL名称account_email
。这仍然导致错误,但重新读取错误之后,我意识到它的过程中抛出呈现默认django-allauth
模板中,allauth观点处理后确认:
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 %}
所以我觉得我使用的代码来自链接的github问题对于确认电子邮件是正确的,并且在allauth视图确认电子邮件地址之后呈现模板期间发生此错误。我希望上面第26-30行的URL是include('rest_auth.registration.urls')
集合的一部分,因为django-rest-auth注册选项使用django-allauth。
我不确定如果allauth视图正确处理确认,我需要做些什么来获取此URL。尽管如此,我猜可能是错误的。
EDIT 2 我从下面的注释了意见,并打印出来的所有网址:
>>> 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....
的NoReverseMatch
错误是有道理的,现在,因为在allauth确认邮件视图只是AREN URL模式不在场。
我在链接的StackOverflow问题注意到,海报已列入allauth网址,像这样:
url(r'^accounts/', include('allauth.urls')),
当我加入这行,它的工作!
是不是只是一个错字?在eror中,它表示:对于'account_email'是相反的,并且您在url name =“account_confirm_email”中有这个名称,您可以尝试在url中使用相同的名称吗? –
感谢您的想法 - 我认为它应该是'account_confirm_email',并且这个NoReverseMatch来自一个基本的django-allauth模板上的URL,它没有反转。我在原文中增加了一些细节,概述了所有这些 – dkhaupt
我不明白你为什么会得到这个错误,但我可以给出其他的想法来调试这个,通过show_urls命令检查url模式。如果你安装了[django-extenstions](http://django-extensions.readthedocs.io) –