![](/img/trans.png)
[英]How to override Django apps.py and its AppConfig for third-party apps which is not there?
[英]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.