当合并第三方django应用程序时,我通常希望它与我的django项目的其余部分进行美学整合。虽然这通常是覆盖应用程序'base.html'(如果是这样)的问题,但我们所有模板的结构都有所不同,因此通常会出现不兼容性。例如,假设一个应用程序定义了{% block footer %}
,并在其模板中将其用于各种各样的事情。如果我已经使用{% block footer %}
作为导航栏或版权信息,我不希望应用的模板覆盖我的阻止。
一个更简单的相关案例是对同一件事使用不同的块名称。例如,{% block extra-head %}
与{% block extrahead %}
。
解决这些情况的最佳方法是什么?理想情况下,重新映射块会很好,所以你可以做一些事情,比如“把孩子的{% block footer %}
放在父亲的{% block content-footer %}
”中。有没有办法接近这个?或者是简单地覆盖每个冲突模板的唯一解决方案?
答案 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上组合了一个我喜欢的模板,我见过另一个 - 但到目前为止还没有任何合并围绕一个标准。可能因为查找替换实际上是一个非常低的成本,因为能够完全按照自己的意愿行事,而没有其他人的规则妨碍你。