【问题标题】:Default/logical directory structure for DjangoDjango 的默认/逻辑目录结构
【发布时间】:2017-10-04 22:47:59
【问题描述】:

我已经阅读了许多教程,构建了一些应用程序,甚至阅读了 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 中列出“应用程序”似乎也不合逻辑,并且 - 再一次 - Django 需要上下遍历才能找到这些文件(而不仅仅是能够查看 os.path 指定的目录.abspath(文件).

【问题讨论】:

  • 在某些方面将 venv 放在哪里更多地取决于您的 devops 和您打算在哪里构建。如果你通过 elasticbeanstalk 在 AWS 中构建,我通常会将它放在本地的父级中,这样我就不需要 .gitignore 了。如果您使用 docker 进行部署,您可能会以不同的方式放置。不要过度使用应用程序和模型。从历史上看,这使得迁移更加艰难。 medium.com/cs-math/…
  • 从 1.3 开始使用 Django,他们一直在更改目录结构(或者他们确实如此)。希望他们已经决定这个不会改变。

标签: django python-3.x heroku


【解决方案1】:

请注意,默认项目布局只是一个建议,如果您愿意,没有什么能阻止您将应用程序放在 mysitedir 中。

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

如果您将应用程序移动到内部mysitedir(包含设置的那个),那么您将使用mysitedir.myapp1mysitedir.myapp2 等导入应用程序。您的代码现在具有硬编码的项目名称,所以它是可重用性较低。

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

【讨论】:

  • 明白了——很好的解释。 Django 很聪明,但有时也很神秘。
猜你喜欢
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多