44

布局大型 django 项目的最佳方式是什么?这些教程提供了设置应用程序、模型和视图的简单说明,但是关于如何分解应用程序和项目、在典型项目中应用程序之间允许/需要多少共享的信息(显然这在很大程度上取决于项目)以及应如何/在何处保留通用模板。

有人对为什么某个项目布局比另一个更好有示例、建议和解释吗?我对大量单元测试(实际代码库大小的 2-5 倍)和字符串外部化/模板的合并特别感兴趣。

4

6 回答 6

19

主要准则类似于任何其他大型代码项目。应用程序应该解决一个单一的、明确定义的职责。“应用程序”这个名称用词不当;Django 应用程序应该更多地被认为是可重用的组件,可以将它们插入在一起以创建一个真正的应用程序。每个应用程序的测试应包含在该应用程序中。应用程序应该尽可能地相互解耦,但显然会有依赖关系,因此目标应该是保持依赖关系图尽可能简单和健全。

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

重新“字符串外部化”,如果你的意思是 i18n 和 l10n,Django 强烈支持它以及放置 .po 文件的标准位置 - 检查文档

于 2008-09-25T19:30:33.117 回答
9

我发现 Zachary 的布局非常有用 Zachary Voase 的博客 » Django Project Conventions, Revisited。

于 2010-04-22T01:17:57.243 回答
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 和 tests(目录)的注释也适用于模型,这有助于解决一个文件无法访问多个测试(或模型)的问题。

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

于 2008-09-04T16:44:21.240 回答
3

Pinax 项目是围绕小型可重用应用程序的想法构建的,这些应用程序很容易组合到一个项目中。他们使用项目Cloud 27作为演示项目。

我正在处理的 Django 项目(称为 Basie。它是 0.1 之前的版本,所以还没有链接。)正在尝试遵循 Pinax 模型,到目前为止它运行得相当好。

于 2008-10-31T00:22:43.880 回答
1

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

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

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

于 2009-01-09T10:35:43.667 回答
1

I really like Randall Degges' post on this subject. He leaves out info on how to glue the settings files together, but I'll have a post on that I'll be able to link, but for now anyone can check out my repo where I include some direction in the readme.

于 2012-07-21T12:40:56.843 回答