Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: built-in password reset views

I am following the documentation and I am getting a NoReverseMatch error when I click on the page to restart my password.

NoReverseMatch at /resetpassword/ Reverse for 'password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

urls.py:

(r'^resetpassword/passwordsent/$', 'django.contrib.auth.views.password_reset_done'),
(r'^resetpassword/$', 'django.contrib.auth.views.password_reset', name="reset_password"),
(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>,+)/$', 'django.contrib.auth.views.password_reset_confirm'),
(r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete'),

Here is the code that calls this url in my base.html template:

<a href="{% url 'reset_password' %}">Reset Password</a>

I have been working at this for hours. (I'm a beginner!) Any help would be much appreciated, thanks!

like image 982
user1670032 Avatar asked Dec 01 '13 00:12

user1670032


1 Answers

Add the url name to the entry in your urls.py for password_reset_done:

(r'^resetpassword/passwordsent/$', 'django.contrib.auth.views.password_reset_done', name='password_reset_done'),

Internally, the password_reset view uses reverse('password_reset_done') to look up where to send the user after resetting the password. reverse can take a string representation of a function name, but it needs to match the form used in your patterns - in this case, it can't match because the full path is specified in your pattern but not in the reverse call. You could import the views from the module and use just their names in the pattern or use a prefix in your patterns if you'd prefer that over the name argument.

https://docs.djangoproject.com/en/dev/ref/urlresolvers/#django.core.urlresolvers.reverse for the details on reverse.

like image 179
Peter DeGlopper Avatar answered Oct 06 '22 00:10

Peter DeGlopper