解决模板块结构与第三方django应用程序冲突

时间:2011-05-09 18:11:52

标签: python django templates inheritance extensibility

当合并第三方django应用程序时,我通常希望它与我的django项目的其余部分进行美学整合。虽然这通常是覆盖应用程序'base.html'(如果是这样)的问题,但我们所有模板的结构都有所不同,因此通常会出现不兼容性。例如,假设一个应用程序定义了{% block footer %},并在其模板中将其用于各种各样的事情。如果我已经使用{% block footer %}作为导航栏或版权信息,我不希望应用的模板覆盖我的阻止。

一个更简单的相关案例是对同一件事使用不同的块名称。例如,{% block extra-head %}{% block extrahead %}

解决这些情况的最佳方法是什么?理想情况下,重新映射块会很好,所以你可以做一些事情,比如“把孩子的{% block footer %}放在父亲的{% block content-footer %}”中。有没有办法接近这个?或者是简单地覆盖每个冲突模板的唯一解决方案?

1 个答案:

答案 0 :(得分:1)

首先,html继承应该是:

my-sitebase.html
 |-- app-base.html
   |-- app-foo-template.html

我认为这就是你的意思,但措辞有点含糊不清。您可以编辑app-base.html。

其次,覆盖{%block footer%}之类的可重用应用程序几乎故意给使用它的人带来麻烦 - 你应该在提供者的问题跟踪器中标记出来。

如果应用确实对应该在app-base.html区域中执行的{%block footer%}执行了任何操作,那么在将其与您的网站集成时,您只需更改一次。

最后,递归查找替换实际上是非常小的努力。如果您不使用允许此操作的IDE,Text-Crawler是免费的,快速闪存,以及良好的非IDE解决方案。

有几次尝试创建标准的继承模式,我在djangoslingshot.com上组合了一个我喜欢的模板,我见过另一个 - 但到目前为止还没有任何合并围绕一个标准。可能因为查找替换实际上是一个非常低的成本,因为能够完全按照自己的意愿行事,而没有其他人的规则妨碍你。