2008-09-04 65 views
40

布置大django项目的最佳方式是什么?这些教程提供了设置应用程序,模型和视图的简单说明,但关于如何细分应用程序和项目的信息较少,典型项目中应用程序之间允许/必须共享多少共享(显然,这主要取决于该项目)以及如何/在哪里通用模板应该保存。大django项目的项目设计/ FS布局

有没有人有例子,建议和解释至于为什么某个项目布局比另一个好?我特别感兴趣的是加入大量的单元测试(2-5倍实际代码库的大小)和字符串外部化/模板。

回答

17

主要指导原则与任何其他大型代码项目相似。应用应该解决一个明确定义的责任。 “申请”这个名字是一个用词不当;应该将Django应用程序看作更可重用的组件,可以将它们组合在一起以创建实际的应用程序。每个应用程序的测试都应包含在该应用程序中。尽可能将应用程序彼此分离,但显然会存在依赖关系,因此目标应该是尽可能简化和保持依赖关系图。

我更喜欢将项目的所有模板都保存在单个项目范围的模板目录下,并为每个应用程序指定一个子目录(每个应用程序使用模板子目录是Django中非常强大的约定,因为它避免了模板名称应用程序之间的冲突)。单个项目范围模板目录的原因是模板,模板继承树和块名称可能是特定于项目的,因此很难提供可插入任何项目的“默认”应用程序模板。已经有一些尝试解决基本站点范围的模板和它们定义的块的标准命名约定,但是我还没有看到标准出现(他们在Pinax处做的事情可能是最接近我们的标准)。

再“串外化”,如果你的意思是国际化和本地化,Django的具有该标准的地方,它把.po文件大力支持 - 检查docs

6

此页面确实解决了我的一些问题的一个好工作:http://www.b-list.org/weblog/2006/sep/10/django-tips-laying-out-application/

具体做法是:

  1. 定义自定义模板标签或过滤器,你必须创建在应用程序的一个子目录目录名为templatetags,并且它必须包含一个名为__init__.py的文件,以便它可以作为Python模块导入。
  2. 要定义将被Django的测试框架自动发现的单元测试,请将它们放入名为tests的模块(可以是名为tests.py的文件或名为tests的目录)。测试框架也会在该模块中找到任何文档,但是这些文档的首选位置当然是它们设计要测试的类或函数的文档。
  3. 要提供将在应用程序安装后立即执行的自定义SQL,请在应用程序目录中创建一个名为sql的子目录;文件名应该与他们将要操作的表的模型的名称相同;例如,如果您有一个名为weblog的应用程序,其中包含名为Entry的模型,则应用程序目录中的文件sql/entry.sql可用于在创建条目表后立即修改或向其中插入数据。

约tests.py和测试(目录)的说明也适用于模型,这有助于解决方式有许多测试(或模式)的一个文件的问题。

我仍然希望看到应用程序/项目细分的一些示例/建议,以及运行良好的大型django网站。

+0

在这个答案中,您需要在\ _ \ _ init__.py中转义初始下划线以避免它被标记引擎解释为粗体文本。 – akaihola 2009-01-16 12:18:17

3

Pinax project围绕着可重复使用的小应用程序的想法而建立,这些应用程序很容易集成到一个项目中。他们使用项目Cloud 27作为演示项目。

我正在研究的Django项目(称为Basie。它在0.1之前,所以没有链接。)正试图跟随Pinax模型,到目前为止它的工作相当好。

1

我目前的布局源于我想要有我的网站的测试版本。这意味着每个站点都有两个项目,因为它们需要不同的配置,并迫使我将所有应用程序移出项目。

我创建了两个文件夹:$ APP_ROOT/devel和$ APP_ROOT/prod。这些包含所有的应用程序。使用源代码控制(在我的情况下git)我有在HEAD版本devel的应用程序,而prod中的应用程序被锁定到PROD标记。这些模板也具有与应用程序相同布局的自己的文件夹。

现在我可以在devel-apps文件夹和匹配的模板文件夹中完成所有的开发工作。当我有我感到满意的东西时,我会标记该修订版本并更新产品。

1

我真的很喜欢Randall Degges'后在这个问题上。他留下了关于如何将设置文件粘贴在一起的信息,但是我会发布一篇文章,以便我能够链接,但是现在任何人都可以查看my repo,其中包含自述文件中的某个方向。