0

我正在使用 Django1.2.3-3+squeeze1和 Debian 挤压。

我正在尝试在我的应用程序中使用 Django 密码更改视图,对应于django.contrib.auth.views.password_change. 这看起来应该很简单,但我一直遇到问题。

为了简单和完整,我将在线指向我的应用程序文件。该应用程序是bixfile。对应的 Django 项目是bixproj

url.py 中的相关行是 https://bitbucket.org/faheem/bixfile/src/49bcbab3a7be/urls.py#cl-65,即

url(r'^password_change/$', 'django.contrib.auth.views.password_change', {'post_change_redirect':reverse('top_folders')}, name="password_change"),

这会破坏使用它的任何模板。目前,我只 在模板 calgb_base.html 的https://bitbucket.org/faheem/bixfile/src/71de33d01f43/templates/calgb_base.html#cl-21行使用它 ,该模板包含在一堆模板中包括顶层索引视图,对应于模板 https://bitbucket.org/faheem/bixfile/src/71de33d01f43/templates/index.html。calgb_base.html 中的行是

<li><a class="side" href="{% url password_change %}">Password Change</a></li>

index当我导航到对应于 https://bitbucket.org/faheem/bixfile/src/71de33d01f43/urls.py#cl-16https://bitbucket.org/faheem/bixfile/src/71de33d01f43/views的顶视图时.py#cl-203 我看到一个错误,以

Caught NoReverseMatch while rendering: Reverse for 'password_change'
with arguments '()' and keyword arguments '{}' not found.

我怀疑完整的回溯是否有用,但我已将其粘贴在 http://paste.lisp.org/display/122996上。

Apache 2.2 和 mod-wsgi 以及内置的 Django 测试服务器(见下文)都可以重现此错误。

如果我直接访问 /password_change/ 相关 url,我会按预期看到密码更改表单。

奇怪的是,我编写的所有测试都通过了,并产生了预期的结果。参见例如 testIndexUrltestIndexViewtest_password_change_url

您可以从bixproj目录运行测试

python manage.py test

如果您想尝试重现此错误,则相对容易。

首先下载项目 ( bixproj) 和应用程序存储库 ( bixfile)。所以

hg clone ssh://hg@bitbucket.org/faheem/bixproj
hg clone ssh://hg@bitbucket.org/faheem/bixfile

然后确保 bixfile 在 Python 路径中。更改数据库以使用 sqlite。然后改变

LOGIN_URL = '/'+BIXFILE_NAME+'/login/'
LOGIN_REDIRECT_URL= '/'+BIXFILE_NAME+'/'

LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL= '/'

然后运行

python manage.py runserver

bixproj本地计算机上的目录中并转到默认 url http://127.0.0.1:8000/应该会显示错误。

我希望我可以在必要时生成一个显示错误的最小示例,但我真的希望这个错误是显而易见的,我不必这样做。提前致谢。

4

1 回答 1

1

你的bixfiles.urls用途reversereverse这是不可能的,因为调用时还没有加载 url 。

Django 1.4 将有一个reverse_lazy特性可以解决这个问题。

与此同时,您可以:

  1. 在您的项目中实施reverse_lazy(参见变更集 16121)。
  2. 硬编码网址而不是使用反向
于 2011-06-28T23:16:29.703 回答