2

这个让我摸不着头脑。我有一个带有视图的应用程序,它可以进行表单处理(登录/注册),然后HttpResponseRedirect()根据输入返回各种 s。所有这些重定向都包含reverse()以字符串形式列出的适当函数的查找。每个函数urlpattern在 urls.py 中都有对应的。

直到今天早上一切都很好。

现在,每当我提交表单时,Django 都会给我一个不存在的行的语法错误:

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

(该文件只有 354 行)

当我向下滚动查看回溯时,突出显示的行始终是带有return HttpResponseRedirect( reverse('app.views.func') ).

由于这些令人困惑的错误消息,我什至不确定问题是否真的出在HttpResponseRedirect( reverse() )s. 几天来我没有碰过任何代码,所以我不确定为什么它会突然开始抛出这样的奇怪错误。

任何帮助调试这将不胜感激!

4

1 回答 1

3

在咨询了该功能的文档reverse()后,我终于弄清楚了。

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

因此,即使我没有查看正在使用新视图执行任何操作的页面,但由于其工作方式,我的旧视图仍然会因语法错误而出错reverse()

文档

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

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

于 2012-04-11T20:18:11.503 回答