为什么Django将两个文件夹命名为项目名?

9 投票
1 回答
2211 浏览
提问于 2025-04-18 11:16

在我的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 中唯一引用的这个项目的部分。一旦这样做了,其他的东西应该就能像你预期的那样正常工作。(不过,如果你觉得这个双重命名让人困惑,你当然可以小心翼翼地重命名一些东西。)

撰写回答