我正在尝试将我的webapp从Django 1.5升级到Django 1.6,并且作为我使用的{jjoo应用程序集的一部分django-registration 1.0。
升级到Django 1.6后,我的应用程序无法识别built-in authentication views。它们被集成在django注册中,如here所示,但它们已停止工作。
Django发行说明描述了change in the way these views should be integrated,将其与注册应用中看起来很好的源代码进行比较。
我正在介绍注册网址如下:
urlpatterns = patterns('',
...,
url(r'^accounts/', include('registration.backends.default.urls')),
)
我在请求内置网址时遇到错误,例如/accounts/password/change/
django.core.urlresolvers.NoReverseMatch
NoReverseMatch: Reverse for 'password_change_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
有没有人知道为什么我会收到无反向匹配错误?
答案 0 :(得分:35)
此错误的原因是django.contrib.auth.views
使用的网址名称与registration.auth_urls
不同。要修补此问题,请覆盖默认网址,直到django-registration更新为django 1.6,并使用与Django相同的名称。
from django.contrib.auth import views as auth_views
urlpatterns = patterns('',
#override the default urls
url(r'^password/change/$',
auth_views.password_change,
name='password_change'),
url(r'^password/change/done/$',
auth_views.password_change_done,
name='password_change_done'),
url(r'^password/reset/$',
auth_views.password_reset,
name='password_reset'),
url(r'^password/reset/done/$',
auth_views.password_reset_done,
name='password_reset_done'),
url(r'^password/reset/complete/$',
auth_views.password_reset_complete,
name='password_reset_complete'),
url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
auth_views.password_reset_confirm,
name='password_reset_confirm'),
#and now add the registration urls
url(r'', include('registration.backends.default.urls')),
)
答案 1 :(得分:8)
以下是我使用的内容:
url(r'', include('registration.backends.default.urls')),
url(r'', include('django.contrib.auth.urls')),
Django contrib现在包括遗失的网址
答案 2 :(得分:0)
<强>背景强>
django-registration == 1.0和Django == 1.6似乎又出现了这个问题,并且在官方django-registration pull请求中记录了here。我使用了@Jay提供的解决方案,但它没有专门用于密码重置部分。我最终得到了这个错误:
错误强>
password_reset_confirm() got an unexpected keyword argument 'uidb36'
<强>解决方案强>
相反,我通过执行以下操作从另一个django-registration存储库(如上面的官方pull请求中提到的)中撤消: