Django 1.0,使用默认密码重置

时间:2009-06-02 22:09:28

标签: python django

我正在尝试使用Django附带的密码重置设置,但文档并不是很好。我正在使用Django 1.0,我不断收到此错误:

Caught an exception while rendering: Reverse for 'mysite.django.contrib.auth.views.password_reset_confirm' with arguments '()' and keyword arguments ...

在我的urlconf中我有这样的事情:

#django.contrib.auth.views
urlpatterns = patterns('django.contrib.auth.views',    
    (r'^password_reset/$', 'password_reset', {'template_name': 'accounts/registration/password_reset_form.html', 'email_template_name':'accounts/registration/password_reset_email.html', 'post_reset_redirect':'accounts/login/'}),
    (r'^password_reset/done/$', 'password_reset_done', {'template_name': 'accounts/registration/password_reset_done.html'}),
    (r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'password_reset_confirm', {'template_name': 'accounts/registration/password_reset_confirm.html', 'post_reset_redirect':'accounts/login/', 'post_reset_redirect':'accounts/reset/done/'}),
    (r'^reset/done/$', 'password_reset_complete', {'template_name': 'accounts/registration/password_reset_complete.html'}),
)

问题似乎出现在这个文件中:

password_reset_email.html 
第7行

{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %}

我不知道发生了什么,所以任何帮助都会受到赞赏。

由于

4 个答案:

答案 0 :(得分:3)

修改:我使用了您的示例,并且必须更改为不使用关键字参数。

{% url django.contrib.auth.views.password_reset_confirm uid, token %}

只要定义了uid和token,命名参数就可以工作。如果未定义任何一个或空白,我会收到同样的错误:

{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %}

答案 1 :(得分:2)

只想发布我想出的解决方案。问题出在这一行:

{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %}

我也不是100%为什么,所以我只是硬编码这样的网址:

http://mysite.com/accounts/reset/{{uid}}-{{token}}/

答案 2 :(得分:2)

我在这个页面和互联网上的所有其他页面上尝试了所有内容超过一个小时,我一直在努力。最后在我的情况下解决问题我不得不删除

{% load url from future %}

从我的password_reset_email.html模板的顶部。

另请注意,url脚本中的“uidb36 = uid”。这是我的完整password_reset_email.html模板,我希望能节省一些时间:

{% autoescape off %}
    You're receiving this e-mail because you requested a password reset for your user account at {{ site_name }}.


Please go to the following page and choose a new password:
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url django.contrib.auth.views.password_reset_confirm uidb36=uid token=token %}
{% endblock %}

Your username, in case you've forgotten:" %} {{ user.username }}

Thanks for using our site!

The {{ site_name }} team

{% endautoescape %}

答案 3 :(得分:0)

这是我在10分钟前发现自己的问题。解决方案是将post_change_redirect值添加到要传递给password_reset视图的参数字典中。

所以这就是我现在的样子:

(r'^/password/$', password_change, {'template_name': 'testing/password.html', 'post_change_redirect': '/account/'})

我希望能帮到你!我同意这个特定功能的文档缺乏一些,但这解决了我的项目完全相同的问题。

编辑:我真的应该滚动 - 你已经把它包括在内了。为此道歉,但我希望你把它分类:)