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

int*_*tar 8 django configuration

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

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

try:
    from extras import *
except ImportError, e:
    print "import extras failed :: " + `e`
Run Code Online (Sandbox Code Playgroud)

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

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

这似乎是由于我试图

from django.contrib.auth.models import User,UserManager
from django.db import models
Run Code Online (Sandbox Code Playgroud)

在那个extras.py文件中.

有人有主意吗?

干杯

Vin*_*jip 17

通常,有一条线

from django.db import models
Run Code Online (Sandbox Code Playgroud)

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

错误:在包含"./manage.py"的目录中找不到文件'settings.py'.看来你已经定制了东西.您必须运行django-admin.py,并将其传递给您的设置模块.(如果文件settings.py确实存在,则会以某种方式导致ImportError.)

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

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

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

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

  • +1一般规则永远不会从settings.py中的Django导入任何内容. (2认同)