0

(用更多信息更新我的问题。)我的 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

4 回答 4

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"
于 2012-07-20T20:04:51.077 回答
0

你改变/设置了DJANGO_SETTINGS_MODULE吗?

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

于 2012-07-20T05:28:15.923 回答
0

修改你的manage.py:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
于 2012-07-20T10:23:52.033 回答
0

PyCharm 有时会将 DJANGO_SETTINGS_MODULE 覆盖为空字符串。尝试调试您的 manage.py 并查看它在setdefault()调用后是否真的发生了变化。如果它没有更改 pycharm 设置或使用os.environ['DJANGO....']='my_settings'.. 或在.idea/. .idea/workspaed.xml包含

环境名称="DJANGO_SETTINGS_MODULE" 值=""
在这种情况下

于 2013-10-10T18:33:47.880 回答