使用泛型PasswordChangeForm Django视图呈现时捕获到NoReverseMatch

使用泛型PasswordChangeForm Django视图呈现时捕获到NoReverseMatch,django,django-templates,django-urls,Django,Django Templates,Django Urls,我试图在Django中使用通用的PasswordChangeForm和password_change视图,但遇到了NoReverseMatch错误 这是我的URL.py: (r'^change_pass/','django.contrib.auth.views.password_change', {'post_change_redirect':'/home'}), 然后,我尝试从模板调用以下内容: <form action="{% url django.contrib.auth.

我试图在Django中使用通用的PasswordChangeForm和password_change视图,但遇到了NoReverseMatch错误

这是我的URL.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:找不到参数为“()”且关键字参数为“{post\u change\u redirect':u'/home/userpage'}”的'django.contrib.auth.views.password\u change'的反向


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

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


如果您考虑一下定义URL的方式,如果调用者想要覆盖它,参数会转到哪里?

因此,在这种情况下,执行post_change_重定向的唯一方法是使用(?p[任何])将其直接传递到URL中--当我传递看起来像URL本身的东西时,这不是很难看吗?我最终重新实现了它,这样就可以从请求中删除下一个内容--这样看起来更加一致。或者你能想出更好的方法吗?