为什么Django将两个文件夹命名为项目名?
在我的Django项目结构中(默认设置),我的文件夹结构是这样的:
/mysite
/mysite
__init.py
settings.py
urls.py
wsgi.py
/mymodel
...
/myapp
...
manage.py
要访问设置文件,默认情况下,wsgi.py是指向mysite/settings.py的。但是,Django给了两个名为mysite的文件夹,一个在另一个里面。所以它在最上层的文件夹里找,没找到,就报错了。我试过把路径改成mysite/mysite/settings.py,并把上层的mysite目录加到系统路径里,但还是报同样的错。
ImportError: Could not import settings 'mysite.mysite.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named mysite.mysite.settings
想要获取更多关于这个错误的信息,可以查看这个链接:如何解决ImportError: 无法导入设置'mofin.settings'的问题?
我只是想知道,为什么Django会把默认结构弄得这么复杂,重命名文件是不是解决问题的最好办法?这样做似乎有点随意,而且容易出错。如果我开始重命名,可能要改很多地方,感觉很危险。
1 个回答
8
要理解的关键点是,最顶层的 mysite
其实 不是 一个 Python 包(注意这里没有 __init__.py
文件)。它只是一个普通的文件夹,用来帮助整理项目结构。(这就是为什么 mysite.mysite.settings
永远无法工作,不管你的 PYTHONPATH
设置得多么好。)
你需要做的就是确保顶层的 mysite
文件夹是你在 PYTHONPATH
中唯一引用的这个项目的部分。一旦这样做了,其他的东西应该就能像你预期的那样正常工作。(不过,如果你觉得这个双重命名让人困惑,你当然可以小心翼翼地重命名一些东西。)