这个让我挠头。我有一个应用程序,其视图确实形成处理(登录/注册),然后根据输入返回各种HttpResponseRedirect()
。所有这些重定向都包含reverse()
个查找,其中相应的函数列为字符串。并且每个函数在urls.py中都有相应的urlpattern
。
直到今天早上一切正常。
现在,每当我提交表单时,Django都会为不存在的行提供语法错误:
SyntaxError at /logout/
invalid syntax (views.py, line 399)
(该文件只有354行)
当我向下滚动以查看回溯时,突出显示的行始终是return HttpResponseRedirect( reverse('app.views.func') )
的行。
由于这些令人困惑的错误消息,我甚至不确定HttpResponseRedirect( reverse() )
的问题是否真的存在。我几天之内没有触及任何代码,所以我不确定为什么会突然开始抛出这样的奇怪错误。
任何帮助调试此功能都将非常感谢!
答案 0 :(得分:3)
我终于在consulting the docs for the reverse()
函数之后找到了它。
当您调用reverse()
时,django首先导入项目的URLConf文件,然后导入URLconf中声明的每个视图模块。我的问题是我正在研究一种新的,完全不相关的视图,它有语法错误(在第399行!)。
因此,即使我没有查看使用新视图执行任何操作的页面,但由于reverse()
的工作原理,我的旧视图仍然因语法错误而被绊倒。
来自the docs:
确保您的观点都正确无误。作为计算哪个URL的一部分 名称映射到哪些模式,reverse()函数必须全部导入 您的URLconf文件并检查每个视图的名称。这涉及到 导入每个视图功能。如果导入时有任何错误 你的任何视图函数都会导致reverse()引发错误, 即使该视图功能不是您要反转的功能。
确保您在URLconf文件中引用的任何视图都存在 可以正确导入。不要包含引用视图的行 你还没有写,因为这些观点是不可导入的。