NoReverseMatch:在Django-registration的密码重置表单中?

时间:2014-03-21 23:39:55

标签: django django-forms django-registration django-users

访问此网址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: []

我的password_reset_form.html

{% 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 %}

编辑: 我已按照frnhr的建议进行了更正,但会弹出以下错误。

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

2 个答案:

答案 0 :(得分:2)

Django-registration尚未与Django 1.6兼容。此补丁将解决您的问题: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'),
)

答案 1 :(得分:0)

您得到的错误可能是因为您可能没有在urls.py中设置模板的路径。因此,Django尝试使用默认注册模板,如果您尚未启用管理员,则无法使用该模板。 所以这两个解决方案, 如果您想使用Django的模板重置密码(或者@frnhr上面提到的任何其他功能,请将此行添加到您的urls.py:

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

或者,如果您想使用自己的模板,请在上面的答案

中将此参数添加到字典中
{'template_name' : 'registration/password_reset_form.html' }

会使它看起来像,

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')
希望有所帮助!