(更多信息更新我的问题。) 我的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
答案 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=""在这种情况下