我已经完成了许多教程,构建了一些应用程序,甚至还有一个Django的创建者阅读了这本书。但我对'正确'的目录结构感到困惑。
似乎总会看到一棵看起来像这样的树(顶部有一个虚拟环境):
venvdir
|
+---manage.py
|
+---mysitedir
| +--settings.py
| +--urls.p
| +--staticfiles (where collectstatic puts everything)
|
+---myapp1dir
| +--views.py
| +--models.py
| +--staticdir
| +---static-objects-tree...
我觉得令人困惑的是
os.path.abspath(__file__)
指向'mysitedir'(引用说它始终指向带有settings.py的目录)。
据推测,这个想法是整个'网站'在其下面有一个或多个“应用程序”,尽管我从未见过这样做过。
首先,这是正确的吗?
其次,是否存在一些令人信服的理由(或者我做错了),以至于“应用”不会插入“mysitedir”下面?这似乎更有意义并保持模块化。
Django做整个树寻找静态文件的方式似乎很奇怪。你在settings.py中列出'apps'似乎也是不合逻辑的,而且 - 再一次 - Django需要向上和向下遍历才能找到这些文件(而不是只能查看os.path指定的目录) .abspath(的文件)。
答案 0 :(得分:0)
请注意,默认的项目布局只是一个建议,如果您愿意,那么您的应用就不会停止在mysitedir
。
Django希望能够轻松制作可重复使用的应用程序。运行manage.py runserver
时,包含manage.py
的目录位于Python路径上。因此,您可以使用myapp1
,myapp2
等<。p>导入该目录中的应用
如果您将应用移动到内部mysitedir
(包含设置的应用),那么您将使用mysitedir.myapp1
,mysitedir.myapp2
等导入应用。您的代码现在具有项目名称硬编码,因此不太可重复使用。
最后,Django并没有真正去过&#34;上下穿越&#34;项目的目录。执行import myapp
时,Python会从Python路径导入模块。这可能是包含manage.py
的外部项目目录,或者如果它是已安装的软件包,它可能会完全不同。