【问题标题】:"Apps aren't loaded yet" and "django.core.exceptions.ImproperlyConfigured" in Django?Django中的“应用程序尚未加载”和“django.core.exceptions.ImproperlyConfigured”?
【发布时间】:2017-03-28 10:55:56
【问题描述】:

这是我的 Django 项目的目录结构。当我运行从文件“framework_product_processing.py”导入模型的python代码:from scraping.models import LinkVendorStandard时,它会抛出这个异常:

django.core.exceptions.ImproperlyConfigured:请求设置 DEFAULT_INDEX_TABLESPACE,但未配置设置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。

当我添加此代码时: import django django.setup()

为了初始化 django 项目设置,我得到了这个异常:django.core.exceptions.AppRegistryNotReady: Apps are not loaded yet.

我对此行为有以下 2 个问题:

  1. django 项目结构中的文件:“framework_product_process.py”与“views.py”处于同一级别,无需设置 Django 项目即可访问模型。如果此文件可从相同的 python 路径访问那么为什么django.core.exceptions.ImproperlyConfigured?
  2. 即使在添加 import django;django.setup() 代码后,为什么我得到 django.core.exceptions.AppRegistryNotReady:应用尚未加载。?

谁能解释一下?

更新: 当我将文件“framework_prodcut_processing.py”移动到 non_app python 目录时,它运行时没有任何错误。 non_app 不是 Django 应用程序。

【问题讨论】:

  • 你能详细说明你是如何运行导入的吗?你运行manage.py runserver 或manage.py shell 来实现它吗?
  • 我直接将文件执行为python framework_product_process.py
  • @daved 改为自定义管理命令。
  • @brunodesthuilliers 这是个好建议。

标签: python django django-models


【解决方案1】:

django.core.exceptions.ImproperlyConfigured

当您运行python manage.py runserver 之类的命令时,django 会使用DJANGO_SETTINGS_MODULE 环境变量自动为您运行django.setup。所以views.py 中的代码可以访问模型,因为django 确保在导入视图之前调用django.setup。由于您将 shell 脚本作为简单的 python 文件运行,因此您必须手动调用django.setup。

django.core.exceptions.AppRegistryNotReady:应用尚未加载

这通常发生在您的应用在导入完整设置文件之前被导入(即在 INSTALLED_APPS 初始化之前)。因此,请确保设置文件中没有任何代码,该文件会从其他一些应用程序导入代码。

同时确保您没有在应用的__init__.py 文件中导入模型或类似的应用代码。

【讨论】:

  • 您的回答帮助我理解了第一个问题,谢谢。但是关于第二个问题,我认为在导入设置文件之前导入应用程序不适用于此处,因为在文件中“framework_product_process.py”以import django;django.setup() 开头。我通过将相关文件移出到 python 目录来使其工作 - 请查看相关更新。
  • 运行django.setup时会导入设置文件,这可能导致我在回答中提到的情况
  • 最后一句话/段落让我感到困惑...... __init__.py 文件的全部目的不是在其中包含导入语句吗?如果我们不打算在其中导入内容,您建议我们在该文件中包含什么?
  • @ArtOfWarfare 好吧,理想情况下,这就是 "init_" 添加模块的公共导入的目的。然而,对于 Django 应用程序,它也有导致循环导入和过早模型导入的趋势,因为在导入应用程序时会解析 init 文件
猜你喜欢
  • 2017-08-21
  • 2016-08-04
  • 2016-06-01
  • 2016-01-08
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
相关资源
最近更新 更多