不同的bug总是引发相同的错误:配置不当:包含的URLconf'myproject.url“在我看来没有任何模式

2024-04-25 07:50:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个相当标准的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.

我希望错误消息会根据所发生的错误而改变。如果不发生这种情况,调试起来就非常困难。你知道吗

有什么想法吗?你知道吗


Tags: the项目django代码in模型名称应用程序
2条回答

当您使用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。看来你也面临着类似的问题。你知道吗

相关问题 更多 >

    热门问题