我有一个相当标准的Django项目,有几个应用程序,每个应用程序都有自己的URL、模型、表单等。。。你知道吗
我的问题是,每当我在代码中出错时(例如,在表单“fields”属性中为模型字段编写错误的名称),所引发的错误总是相同的:
django.core.exceptions.ImproperlyConfigured: The included URLconf 'myproject.urls' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.
我希望错误消息会根据所发生的错误而改变。如果不发生这种情况,调试起来就非常困难。你知道吗
有什么想法吗?你知道吗
当您使用
runserver
运行Django项目时,Django加载URL模式。通常,在URL模式中导入视图。进而导入模型和表单。你知道吗因此,如果这些文件中的任何一个在顶层包含语法错误或python错误(见下文),这将导致加载url失败。但是,如果向上滚动跟踪,您将看到另一个错误,即导致导入失败的实际错误。它会说“在处理这个异常的过程中,发生了另一个异常”。你知道吗
然而,python实际上并没有运行它导入的所有代码。类定义只会导致python读取类名及其属性(方法也是属性)。你知道吗
当python导入一个类时,它调用它的
__new__()
方法,而不是它的__init__()
方法或您定义的任何其他方法。因此,只会抛出类的顶层错误(例如,在属性定义中使用未知变量)或Meta
类中的错误。你知道吗**编辑**:
Meta
类内的fields = ['some_field']
确实在创建类对象时运行(__new__()
方法),Django将检查相应模型中是否存在该字段,因为它将该字段分配给类的_meta
属性。你知道吗在其他情况下,当您说“每当我在代码中犯了错误”时,通常不应该引起错误,因为python不应该实际实例化表单(运行它的
__init__()
方法)或运行您编写的任何方法。所以应该避免在代码的顶层实例化任何类,实例化应该发生在函数/方法内部,这样python就不会出现这些错误。你知道吗所以检查你的视图.py文件,以查看是否只是导入表单类(
from my_forms import MyForm
),或者是否还在文件的顶层实例化表单(form = MyForm()
,请注意括号)或将其作为基于类的视图的属性。你知道吗在Django2.2中,
runserver
代码has been updated。不幸的是,这似乎有副作用,一些错误没有像以前那样清晰地显示出来。你知道吗我在阅读this question之后创建了ticket 30329。看来你也面临着类似的问题。你知道吗
相关问题 更多 >
编程相关推荐