按照此处答案中的目录结构:
Best practice for Django project working directory structure
在此处查看 GitHub 上的代码以进行故障排除:
我将 manage.py 移到了 scripts 目录中。我修改了 manage.py 和 wsgi.py 以包含这些行:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
代替默认值:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj_dir.settings")
我认为这基本上是等价的。
无论如何,这是我在运行 python manage.py runserver 时遇到的错误:
File "C:\Users\ISH~1\DJANGO~1\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named '{{ project_name }}'
我试过使用相对导入,但确实无法解决问题。作为新手,我确信答案很明显,但我花了几个小时阅读有关该问题的内容,但并没有真正取得任何进展。
有人建议添加 from . import * 但这只是导致:
Traceback (most recent call last):
File "manage.py", line 4, in <module>
from . import *
SystemError: Parent module '' not loaded, cannot perform relative import
virtualenv 处于事件状态,我从正确的目录运行 manage.py。当它不在 /scripts/ 中时工作正常。
编辑:
我没有提到这一点,但不管在 manage.py 中是否是:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj_dir.settings")
或者:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name )).settings")
结果始终是 ImportError: No Module named 'xyz'。在settings之前填写xyz。
此外,以上内容表明,我的项目并未像第一个链接中讨论的那样 100% 实现。我的 settings.py 仍然在默认位置。基本上看起来像这样:
~/projects/django-project
/proj_dir
settings.py
urls.py
wsgi.py
/scripts
manage.py
此外,我尝试这样做是因为我认为它可能正在寻找 scripts 中的 proj_dir 而我实际上希望它上升到一个级别以寻找 proj_dir.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", ".proj_dir.settings")
这只会引发以下错误。
TypeError: the 'package' argument is required to perform a relative import for '.proj_dir.settings'
那是我开始摆弄 import 和 from 的时候。 import 因为文档说错误与此有关。仍然无法解决问题。
请您参考如下方法:
如果您已将 manage.py 移动到 scripts 目录,则必须将父目录显式添加到 python 路径。
sys.path.append('..')
不应更改设置 DJANGO_SETTINGS_MODULE 环境变量的行。保持原样
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj_dir.settings")
