使用通用PasswordChangeForm Django视图渲染时捕获NoReverseMatch

时间:2010-10-10 17:11:35

标签: django django-templates django-urls

我正在尝试在Django中使用通用的PasswordChangeForm和password_change视图,并遇到NoReverseMatch错误。

这是我的urls.py:

    (r'^change_pass/','django.contrib.auth.views.password_change', {'post_change_redirect':'/home'}),

然后,我试图从模板中调用以下内容:

<form action="{% url django.contrib.auth.views.password_change post_change_redirect="/home/userpage" %}" method="POST">

我得到了

渲染时捕获NoReverseMatch:反向'django.contrib.auth.views.password_change',参数'()'和关键字参数'{'post_change_redirect':u'/ home / userpage'}'找不到。

我做错了什么?我想如果在urls.py中声明了一个可选变量,那么你可以在调用时通过将其指定为命名参数来覆盖它。谢谢!

1 个答案:

答案 0 :(得分:1)

您定义URL的方式,post_change_redirect参数不是可选的 - 事实上它根本不被接受。视图始终获取您在urlconf中定义的硬编码值。因此,当{% url %}标记查找接受post_change_redirect参数的password_change视图时,它找不到一个,因为您尚未定义一个。

如果你考虑一下你定义URL的方式,如果调用者想要覆盖它,那么参数会去哪里?