models.py的Django ImportError

时间:2012-07-20 05:13:53

标签: django importerror

(更多信息更新我的问题。) 我的django应用程序在我的开发服务器上正常运行。 我有一个视图,使用下面的行从数据库中提取工作正常:

from myapp.models import MyTable

但是,如果我将上面的'from / import'添加到另一个模块(参见下面的结构,它是名为'problem_module.py'的模块)我正在编写我想从sqlite3数据库中提取的地方,我得到了这个错误。

raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'myfolder.settings' (Is it on sys.path?): No module  named myfolder.settings

当人们收到此错误时,我已阅读并尝试了各种解决方案,但我遗漏了一些因为我无法解决问题。

我正在使用Django 1.4并按照建议进行布局。

    mysite/
         manage.py

         mysite/
            __init__.py
            settings.py
            urls.py
            wsgi.py
         myapp/
            __init__.py
            models.py
            admin.py
            views.py

            indevelopment/
                __init__.py
                problem_module.py

4 个答案:

答案 0 :(得分:2)

我仔细查看了django源代码,然后仔细检查了追踪内容。这是发生的事情。

当你跑步时:    python manage.py runserver

环境变量设置正确,假设您已经更改了这个小文件,或者只是不注意它,因为django 1.4会自动为您配置它。     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")

但是,因为os.environ的这个设置是在:     if __name__ = "__main__" 表达式,只有在直接调用该文件时才会运行,如下所示:     python manage.py runserver

否则,如果您正在运行需要该环​​境变量的文件 - 比如在Eclipse中测试模块 - 那么os.environ需要在另一个地方设置(shell等)。

我所得到的一切都指向了这一点,但我需要上下文。

但是在源代码上进行一些调整(是的,不是一个好主意),您也可以在/django/conf/__init__.py

中手动对其进行硬编码

具体来看看它发生的位置,下面的更改有效:

# in module: /django/conf/__init__.py

class LazySettings(LazyObject):
    def _setup(self):
        try:
            # Comment out the call to os.environ and hardcode in your app settings
            #    settings_module = os.environ[ENVIRONMENT_VARIABLE]
            # WARNING: bad practice to do this. ;.
            settings_module = "myapp.settings"

答案 1 :(得分:0)

您是否更改/设置了DJANGO_SETTINGS_MODULE

尝试export DJANGO_SETTINGS_MODULE=mysite.settings并启动您的开发服务器。

答案 2 :(得分:0)

修改您的manage.py:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

答案 3 :(得分:0)

PyCharm有时会覆盖DJANGO_SETTINGS_MODULE以清空字符串。尝试调试您的manage.py,看看setdefault()调用后它是否真的发生了变化。 如果它不是更改pycharm设置或使用os.environ['DJANGO....']='my_settings' .. 或者.idea/处的黑客文件。 .idea/workspaed.xml包含

env name="DJANGO_SETTINGS_MODULE" value=""
在这种情况下