2012-04-11 60 views
2

这个让我挠头。我有一个可以处理表单(登录/注册)的视图的应用程序,然后根据输入返回各种HttpResponseRedirect()。所有这些重定向都包含reverse()查找,并将适当的功能列为字符串。并且每个函数在urls.py中都有对应的urlpattern突然间所有的HttpResponseRedirect(reverse())都给出语法错误

一切都很好,直到今天上午。

现在,每当我提交表单,Django的让我对一个不存在的行语法错误:

SyntaxError at /logout/ 
invalid syntax (views.py, line 399) 

(该文件只有354线)

当我向下滚动一下在回溯处,突出显示的行总是与return HttpResponseRedirect(reverse('app.views.func'))

由于这些令人困惑的错误消息,我甚至不确定问题是否与HttpResponseRedirect(reverse())确实有关。我几天之内没有触及任何代码,所以我不确定为什么它会突然开始抛出这样的奇怪错误。

任何帮助调试这将非常感谢!

+0

你使用的是django的认证系统吗? – 2012-04-11 17:54:37

+0

不存在的行?尝试删除您编译的python文件。尝试'find/my/project/-name * .pyc | xargs rm' – 2012-04-11 17:54:47

+1

听起来像你的脚本没有访问你打算访问的文件。尝试将'views.py'重命名为'_views.py'并检查Django是否抱怨丢失的文件(也许在另一个目录中有不同的文件或其他东西)。 – bitmask 2012-04-11 17:55:02

回答

3

我终于想通了consulting the docs for the reverse()函数。

当你调用reverse()时,django首先导入你项目的URLConf文件,然后导入你的URLconf中声明的每一个视图模块。我的问题是,我正在研究一个新的,完全无关的视图,它有一个语法错误(在399行!)。

因此,即使我没有查看任何新视图的页面,但由于reverse()的工作原理,我的旧视图仍然因语法错误而绊倒。

the docs

确保你的观点是正确的。作为确定哪个URL名称映射到哪些模式的一部分,reverse()函数必须导入URLconf文件的所有 并检查每个视图的名称。这涉及导入每个视图函数的 。如果在导入 任何视图函数时出现任何错误,即使该视图函数不是您想要反转的视图函数,也会导致reverse()引发错误 。

确保您在URLconf文件中引用的任何视图都存在,并且 可以正确导入。不要包含参考视图 的行,因为这些视图不可导入。