繁体   English   中英

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

[英]Resolving template block structure conflicts with third-party django apps

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

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

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

首先,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上,我见过另一个 - 但到目前为止还没有任何关于标准的合并。 可能因为find-replace实际上是一个非常低的成本,因为能够完全按照自己的意愿行事,而不会让别人的规则妨碍你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM