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

Posted

技术标签:

【中文标题】使用通用 PasswordChangeForm Django 视图渲染时捕获 NoReverseMatch【英文标题】:Caught NoReverseMatch while rendering with generic PasswordChangeForm Django view 【发布时间】:2011-04-23 12:15:21 【问题描述】:

我正在尝试在 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】:

按照您定义 URL 的方式,post_change_redirect 参数不是可选的 - 实际上它根本不被接受。视图始终获得您在 urlconf 中定义的硬编码值。所以当% url % 标签去寻找一个接受post_change_redirect 参数的password_change 视图时,它找不到一个,因为你还没有定义一个。

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

【讨论】:

因此,在这种情况下,执行 post_change_redirect 的唯一方法是使用 (?P [whatever]) 将其直接传递到 URL 中——当我在传递看起来像 URL 本身的东西? 我最终重新实现了它,以便它从请求中取出下一个——似乎这种方式更加一致。或者你有没有更好的办法?

以上是关于使用通用 PasswordChangeForm Django 视图渲染时捕获 NoReverseMatch的主要内容,如果未能解决你的问题,请参考以下文章

无法推断通用参数“D”。 [订购错误]

如何为客户特定数据使用通用变量

正则表达式(语言间通用)

利用TPC-H通用微机接口实验箱设计一个数据采集系统,如何取样及进行A/D转换?

如果我们使用 django 通用视图,如何发送成功消息

通用自定义PHP日期格式