1

我想这是对我应该在哪里创建 django 1.4 中的 django 应用程序的后续问题? 最终的答案似乎是“没有人知道为什么 Django 改变了项目结构”——这似乎有点不令人满意。

我们正在启动一个新的 Django 项目,目前我们遵循http://www.deploydjango.com/django_project_structure/index.html中概述的基本结构:

├── project
│   ├── apps
│   │   ├── app1
│   │   └── app2
│   ├── libs
│   │   ├── lib1
│   │   └── lib2
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

但我认为我们也期待一个多开发人员环境,其中包括具有通用项目级组件的大部分独立应用程序,因此对我来说将项目和应用程序路径分开似乎更干净。

├── project
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── apps
│   ├── app1
│   └── app2
├── libs
│   ├── lib1
│   └── lib2
└── manage.py

不过,很难为此提出任何具体的、非风格的理由。(在此之前,我主要只使用单应用程序项目,所以我可能在这里遗漏了一些东西。)

主要是,我的动机是 Django 1.4 似乎正朝着后一个方向发展。我认为有一些基本原理或预期的用例推动了这种变化,但我只看到了关于它可能是什么的猜测。

问题:

  1. 1.4 项目结构变更的动机是什么?
  2. 是否存在在项目内部/外部拥有应用程序会产生重大影响的用例?
4

2 回答 2

6
  1. 从项目中提取应用程序要容易得多,因为不再有这样的导入:

    from projectname.appname.models import MyModel
    

    相反,您导入它们的方式与导入通过 python 包安装的应用程序相同

  2. 如果您使用 i18n,那么这可能会产生影响,因为 makemessages 在当前目录中搜索翻译字符串。使用单个 .po 文件翻译应用程序和项目的一个好方法是在项目目录之外创建语言环境文件夹

    ├── project
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── app1
    ├── app2
    ├── locale
    │   ├── en
    │   └── de
    └── manage.py
    
于 2012-08-21T18:36:33.783 回答
2

我将较早的回复标记为答案,但我在 IRC 档案中遇到了这篇博客文章,其中似乎有一些额外的信息。

http://blog.tinbrain.net/blog/2012/mar/15/django-vs-pythonpath/

据我了解,要点是:

  • 开发时,manage.py 隐式设置PYTHONPATH以查看项目级代码,其结果import myapp适用于项目内定义的应用程序。
  • 当你部署时,你通常不会运行manage.py,所以你不得不说import myproject.myapp,如果你不知道这一点,部署就会中断。
  • “标准”修复是将项目添加到PYTHONPATH,但这会导致双重导入(myappmyproject.myapp),这可能会在信号等事物上产生奇怪的行为。

因此 1.4 项目结构似乎主要是为了消除开发人员依赖manage.py.

于 2012-08-22T17:48:58.250 回答