【问题标题】:Caught NoReverseMatch while rendering with generic PasswordChangeForm Django view使用通用 PasswordChangeForm Django 视图渲染时捕获 NoReverseMatch
【发布时间】: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 中声明了一个可选变量,那么您可以在调用时通过将其指定为命名参数来覆盖它。谢谢!

【问题讨论】:

    标签: django django-templates django-urls


    【解决方案1】:

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

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

    【讨论】:

    • 因此,在这种情况下,执行 post_change_redirect 的唯一方法是使用 (?P [whatever]) 将其直接传递到 URL 中——当我在传递看起来像 URL 本身的东西?
    • 我最终重新实现了它,以便它从请求中取出下一个——似乎这种方式更加一致。或者你有没有更好的办法?
    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 2014-10-14
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2020-02-10
    相关资源
    最近更新 更多