I get the following error when I access this URL http://127.0.0.1:8000/accounts/password/reset/

Request Method: GET
Request URL:    http://127.0.0.1:8000/accounts/password/reset/
Django Version: 1.6.2
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

my password_reset_form.html is

{% extends "registration/base.html" %}
{% load i18n %}

{% block breadcrumbs %}<div class="breadcrumbs"></div>{% endblock %}

{% block title %}{% trans "Password reset" %}{% endblock %}

{% block content %}

<h1>{% trans "Password reset" %}</h1>

<p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one." %}</p>

<form action="" method="post">
    {% csrf_token %}
{{ form.email.errors }}
<p><label for="id_email">{% trans 'E-mail address:' %}</label> {{ form.email }} <input type="submit" value="{% trans 'Reset my password' %}" /></p>
</form>

{% endblock %}

EDIT: I have corrected as suggested by frnhr, but the following error pops up.

TemplateSyntaxError at /accounts/password/reset/
Could not parse the remainder: ',' from 'uid,'
Request Method: POST
Request URL:    http://127.0.0.1:8000/accounts/password/reset/
Django Version: 1.6.2
Exception Type: TemplateSyntaxError
Exception Value:    
Could not parse the remainder: ',' from 'uid,'
Exception Location: /Users/sridhar/Documents/virtualenvs/django/django/lib/python2.7/site-packages/django/template/base.py in __init__, line 577
Python Executable:  /Users/sridhar/Documents/virtualenvs/django/django/bin/python
Python Version: 2.7.5
有帮助吗?

解决方案

Django-registration has not been made compatible with Djagno 1.6. This patch will fix your problem: https://bitbucket.org/ubernostrum/django-registration/pull-request/63/django-16-compatibility-fix-auth-views/diff

registration/auth_urls.py:

urlpatterns = patterns('',
                       url(r'^login/$',
                           auth_views.login,
                           {'template_name': 'registration/login.html'},
                           name='auth_login'),
                       url(r'^logout/$',
                           auth_views.logout,
                           {'template_name': 'registration/logout.html'},
                           name='auth_logout'),
                       url(r'^password/change/$',
                           auth_views.password_change,
                           {'post_change_redirect': reverse_lazy('auth_password_change_done')},
                           name='auth_password_change'),
                       url(r'^password/change/done/$',
                           auth_views.password_change_done,
                           name='auth_password_change_done'),
                       url(r'^password/reset/$',
                           auth_views.password_reset,
                           {'post_reset_redirect': reverse_lazy('auth_password_reset_done')},
                           name='auth_password_reset'),
                       url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
                           auth_views.password_reset_confirm,
                           name='auth_password_reset_confirm'),
                       url(r'^password/reset/complete/$',
                           auth_views.password_reset_complete,
                           {'post_reset_redirect': reverse_lazy('auth_password_reset_complete')},
                           name='auth_password_reset_complete'),
                       url(r'^password/reset/done/$',
                           auth_views.password_reset_done,
                           name='auth_password_reset_done'),
)

其他提示

The error that you get is probably because you might not have set the path to template inside urls.py. Because of that, Django tries using the default registration template, which you won't be able to use if you haven't enabled admin. So the two solutions, If you want to use Django's template for resetting password(or for any other feature that @frnhr has mentioned above add this line to your urls.py :

url(r'^admin/', include(admin.site.urls))

Or, if you want to use your own templates, add this parameter to the dictionary in the answer above

{'template_name' : 'registration/password_reset_form.html' }

which would make it look like,

url(r'^accounts/password/reset/$',
   auth_views.password_reset,
   {'post_reset_redirect': reverse_lazy('auth_password_reset_done'), 
   'template_name': 'registration/password_reset_form.html'},
   name='auth_password_reset')

hope that helps !

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top