为什么我在Django中会收到这个错误?

20

我有一个脚本,它从一个应用程序导入models.py文件,但是它无法导入! 我不认为我应该手动创建一个“export DJANGO…”环境变量……我可能做错了其他事情。

 Traceback (most recent call last):
      File "parse.py", line 8, in ?
        from butterfly.flower.models import Channel, Item
      File "/home/user/shri/butterfly/flower/models.py", line 1, in ?
        from django.db import models
      File "/usr/lib/python2.4/site-packages/django/db/__init__.py", line 10, in ?
        if not settings.DATABASE_ENGINE:
      File "/usr/lib/python2.4/site-packages/django/utils/functional.py", line 269, in __getattr__
        self._setup()
      File "/usr/lib/python2.4/site-packages/django/conf/__init__.py", line 38, in _setup
        raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
    ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
6个回答

38

您需要正确导入设置文件。如果您没有首先导入Django环境变量,那么您的导入将会失败,就像您已经注意到的那样。您需要编写类似以下代码:

import os
# 设置DJANGO_SETTINGS_MODULE环境变量。 os.environ['DJANGO_SETTINGS_MODULE'] = "myproject.settings"
# 进行你的操作

需要注意的是,在导入项目中的任何其他模块之前,必须先执行此命令。 - Dennis Golomazov

17

我不相信我应该手动创建一个"export DJANGO..."环境变量...

无论如何,你需要确保在导入Django模型文件之前在环境中存在该变量, 而不仅仅是手动创建它--不确定您的怀疑原因是什么,但无论是什么,这种怀疑都是没有根据的。


谢谢。那么,可以说在设置Django项目之后,必须设置2个环境变量吗?-DJANGO_SETTINGS_MODULE -PYTHONPATH..将项目路径附加到其中? - TIMEX
1
@hasen,我对任何名叫“Alex”的人都有很高的期望;-)。 - Alex Martelli
@alex,另一种选择是确保你“切断了依赖关系”,通过将某些Django尝试导入的模块的假版本塞入sys.modules中——例如,如果你设置sys.modules['django.db']为自己的假对象,它完全模仿了你的models.py所期望的(可能还有其他假对象),那么避免环境设置可能是可行的。但是,这肯定是一个“壮举”! - Alex Martelli

14

从命令行运行 "python manage.py shell" 应该包含适当的设置,并为您提供 Python 提示符。


7

与其在环境中折腾,另一个选择是编写一个Django定制管理命令,它会为您设置环境(以及其他事项,如选项解析等)。


0
请从命令行执行此命令。这可能会对您有所帮助:
export DJANGO_SETTINGS_MODULE=projectname.settings

0

我遇到了类似的错误,然后我意识到我忘记在应用程序文件夹中创建名为"init.py"的文件:

myapp:
    manage.py
    myapp:
        __init__.py
        settings.py
        ....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接