在Django settings.py中导入文件时出现问题

时间:2009-07-05 22:41:27

标签: django configuration

我有一个Django项目,它似乎与settings.py工作得很好,它也导入了local_settings.py而没有问题。

我现在在设置文件的末尾添加了以下行:

try:
    from extras import *
except ImportError, e:
    print "import extras failed :: " + `e`

extras.py是一个额外配置信息的文件,与settings.py和local_settings.py位于同一目录中,但是,我现在得到:

import extras failed :: ImportError('Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.',)

这似乎是由于我试图

from django.contrib.auth.models import User,UserManager
from django.db import models

在extras.py文件中。

有人有什么想法吗?

欢呼声

2 个答案:

答案 0 :(得分:17)

通常,有一个像

这样的行
from django.db import models
settings.py 中的

导致循环依赖。这会导致导入错误,在不同版本的Django中报告的情况略有不同。例如,如果我将该行添加到正在运行的Django设置并调用“manage.py shell”,我得到:

  

错误:找不到该文件   目录中的'settings.py'   包含'./manage.py'。它出现   你定制的东西。你会的   运行django-admin.py,传递它   你的设置模块。 (如果是文件   settings.py确实存在,它是   以某种方式导致ImportError。)

如果我删除该行,一切都很好。

原因是Django的模型加载机制(位于django.db.models包中)导入settings.py,读取其INSTALLED_APPS以查看应安装哪些应用程序,然后加载这些应用程序。 (您可以通过向已安装的某个应用程序的__init__.py添加打印语句来确认这一点。)

如果您尝试在django.db中导入settings.py内容,则会导致循环导入依赖项和ImportError相关的错误消息。

一种解决方法是将需要有问题的导入(以及导入本身)的功能移动到应用程序。

答案 1 :(得分:3)

那么如何在您的环境中设置DJANGO_SETTINGS_MODULE?它可能是,或者是导入设置时其他嵌套导入导致的设置隐式导入的结果,可能有几个令人讨厌的效果的“循环依赖”(尽管我不相信它会有你正在观察的特定的一个,所以我倾向于第一个假设。)