为什么我无法实现Django的忘记密码功能?
Reverse for 'django.contrib.auth.views.password_reset_confirm' with arguments '()' and keyword arguments '{'uidb36': '1', 'token': '2u6-e139d87034d52a80c572'}' not found.
我已经正确地做到了这一点:
(r'^password/reset/?$',password_reset ),
(r'^password/reset/done/?$',password_reset_done ),
(r'^password/reset/confirm/?$',password_reset_confirm ),
(r'^password/reset/complete/?$',password_reset_complete),
3 个回答
0
在你的模板文件中,可能有这样的模板标签
{% url django.contrib.auth.views.password_reset_confirm %}
可以试着搜索一下类似的东西,举个例子:
find . -iname "*.html" -exec grep -iH "django.contrib.auth.views.password_reset_confirm" {} \;
如果你找到了这样的东西,就检查一下有没有传递参数
1
你在传递参数给它。但是那些urlconf的条目并不需要参数。要么把参数从反向调用中去掉,要么把它们加到urlconf里。
11
Django在处理参数时是自己传递的;你需要接收这些参数并把它们传递给重置密码的表单。
为了更清楚地理解错误信息的意思,它在期待一个网址,这个网址是'django.contrib.auth.views.password_reset_confirm',而这个网址必须能够接收提供的参数,在这个例子中是'uidb36'和'token'。如果这个网址不能接收这些参数,Django就会一直查找,直到它检查完所有的网址,最后就会报错。
像下面这样的代码应该可以正常工作:
(r'^password/reset/confirm/(?P<uidb36>\d+)/(?P<token>[\d\w-]+)$',password_reset_confirm ),
就我个人来说,我更希望这些参数是通过GET方式传递,而不是直接在网址里,不过无所谓啦 :).