布局大型django项目的最佳方法是什么?这些教程提供了有关设置应用程序,模型和视图的简单说明,但关于应如何细分应用程序和项目的信息较少,在典型项目中应用程序之间允许/必要的共享数量(显然这在很大程度上取决于项目)以及应保留一般模板的方式/位置。
有没有人有关于为什么某个项目布局比另一个更好的示例,建议和解释?我特别感兴趣的是结合了大量的单元测试(实际代码库大小的2-5倍)和字符串外化/模板。
答案 0 :(得分:17)
主要指南与任何其他大型代码项目类似。应用程序应该解决一个明确定义的责任。 “申请”这个名称用词不当; Django应用程序应该更多地被视为可重用的组件,可以将它们连接在一起以创建真正的应用程序。每个应用程序的测试应该包含在该应用程序中。应尽可能将应用程序彼此分离,但显然会存在依赖关系,因此目标应该是使依赖关系图尽可能简单明了。
我更喜欢将项目的所有模板保存在单个项目范围的模板目录下,每个应用程序都有一个子目录(使用每个应用程序的模板子目录是Django中非常强大的约定,因为它避免了模板名称冲突应用程序之间)。单个项目范围模板目录的原因是模板,模板继承树和块名称可能非常特定于项目,因此很难提供可以插入任何项目的“默认”应用程序模板。已经有一些尝试来解决基本站点范围模板及其定义的块的标准命名约定,但我还没有看到标准出现(他们在Pinax做事的方式可能是最接近的我们必须达到标准。)
重新“字符串外化”,如果你的意思是i18n和l10n,Django强烈支持它放置.po文件的标准位置 - 检查docs。
答案 1 :(得分:9)
我发现Zachary的布局非常有用 Zachary Voase’s Blog » Django Project Conventions, Revisited.
答案 2 :(得分:6)
此页面很好地解决了我的一些问题:http://www.b-list.org/weblog/2006/sep/10/django-tips-laying-out-application/
具体来说:
- 要定义自定义模板标记或过滤器,必须在应用程序目录中创建名为templatetags的子目录,并且必须包含名为__init__.py的文件,以便可以将其导入为Python模块。
- 要定义Django测试框架会自动注意的单元测试,请将它们放在一个名为tests的模块中(可以是名为tests.py的文件或名为tests的目录)。测试框架还将在该模块中找到任何doctests,但当然,它们的首选位置是它们旨在测试的类或函数的文档字符串。
- 要提供将在安装应用程序后立即执行的自定义SQL,请在应用程序的目录中创建一个名为sql的子目录;文件名应与其操作表的模型名称相同;例如,如果您有一个名为weblog的应用程序包含名为Entry的模型,则应用程序目录中的文件sql / entry.sql可用于在创建条目表后立即修改或插入数据。
醇>
关于tests.py和tests(目录)的注释也适用于模型,这有助于解决为一个文件进行多次测试(或模型)的问题。
我仍然希望看到应用/项目分解的一些示例/建议,以及运行良好的大型django网站。
答案 3 :(得分:3)
Pinax project围绕着小型可重用应用程序的构想而构建,这些应用程序很容易汇集到一个项目中。他们使用项目Cloud 27作为演示项目。
我正在研究的Django项目(称为Basie。它是0.1之前的,所以还没有链接。)正在尝试遵循Pinax模型,到目前为止它的运行情况相当不错。
答案 4 :(得分:1)
我目前的布局源于我想要拥有我网站的测试版本。这意味着每个站点都有两个项目,因为它们需要不同的配置,并迫使我将所有应用程序移出项目。
我创建了两个文件夹:$ APP_ROOT / devel和$ APP_ROOT / prod。这些包含所有应用程序。使用源代码控制(在我的情况下是git)我在HEAD版本中开发了应用程序,而prod中的应用程序被锁定到PROD标记。模板也有自己的文件夹,其布局与应用程序相同。
现在我可以在devel-apps文件夹和匹配的模板文件夹中完成所有开发工作。当我有一些我很满意的东西时,我会标记该修订并更新产品。
答案 5 :(得分:1)
我真的很喜欢Randall Degges'关于这个主题的帖子。他没有提供关于如何将设置文件粘合在一起的信息,但我会发布一条我可以链接的帖子,但是现在任何人都可以查看my repo我在自述文件中包含一些方向的地方