Django

时间:2017-10-04 22:48:00

标签: django python-3.x heroku

我已经完成了许多教程,构建了一些应用程序,甚至还有一个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(的文件)。

1 个答案:

答案 0 :(得分:0)

请注意,默认的项目布局只是一个建议,如果您愿意,那么您的应用就不会停止在mysitedir

Django希望能够轻松制作可重复使用的应用程序。运行manage.py runserver时,包含manage.py的目录位于Python路径上。因此,您可以使用myapp1myapp2等<。p>导入该目录中的应用

如果您将应用移动到内部mysitedir(包含设置的应用),那么您将使用mysitedir.myapp1mysitedir.myapp2等导入应用。您的代码现在具有项目名称硬编码,因此不太可重复使用。

最后,Django并没有真正去过&#34;上下穿越&#34;项目的目录。执行import myapp时,Python会从Python路径导入模块。这可能是包含manage.py的外部项目目录,或者如果它是已安装的软件包,它可能会完全不同。