2017-10-04 84 views
0

我已经经历了许多教程,构建了几个应用程序,甚至还有一位Django的创建者阅读了这本书。但是我被“适当的”目录结构迷住了。Django的默认/逻辑目录结构

一个似乎总是得到一棵树,看起来像这样(在虚拟环境下在顶部):

​​

我感到困惑的是,

os.path.abspath(__file__) 

点“mysitedir” (参考文献说它总是指向其中settings.py的目录)。

想必这个想法是,整个'网站'下面有一个或多个'应用程序',尽管我从来没有见过这样做。

首先,这是否正确?第二,是否有一些令人信服的理由(或者我做错了什么)使'应用程序'不能插入'mysitedir'下面?这似乎更有意义并保持模块化。

Django像遍历整个树寻找静态文件的方式似乎很奇怪。在settings.py中列出'apps'也是不合逻辑的,并且 - 再一次说明 - Django需要遍历并返回来查找这些文件(而不是只能查看由os.path指定的目录.abspath(文件)。

+0

在哪里放置venv在某些方面取决于你的devops和你打算建立的地方。如果你通过elasticbeanstalk在AWS中构建,我通常会把它放在本地父项中,所以我不需要.gitignore它。如果你使用docker进行部署,你可能会采用不同的地方。不要过分使用应用程序和模型。这在历史上使迁移更加简单。 https://medium.com/cs-math/11-things-i-wish-i-knew-about-django-development-before-i-started-my-company-f29f6080c131 – sahutchi

+0

从1.3开始使用Django,他们保留改变目录结构(或他们做了)。希望他们已经决定这一个不会改变。 –

回答

0

注意,默认的项目布局只是一个建议,没有什么能阻止你把你的应用程序在mysitedir如果你想。

的Django希望它很容易使重当您运行manage.py runserver时,包含manage.py的目录位于Python路径中,因此您可以使用myapp1,myapp2等导入该目录中的应用程序。

如果移动应用程序转移至内mysitedir(包含设置了一个),那么你会用mysitedir.myapp1mysitedir.myapp2等您的代码现在有项目名称硬编码的,所以它是可重复使用的较少导入应用程序。

最后,Django并没有真正地“遍历”项目的目录。当您执行import myapp时,Python会从Python路径导入模块。这可能是包含manage.py的外部项目目录,或者如果它是已安装的软件包,则它可能会完全不同。

+0

明白了 - 很好的解释。 Django很聪明,但有时候很神秘。 – eSurfsnake