【问题标题】:Override a block from an include via extend is blank?通过扩展覆盖来自包含的块是空白的?
【发布时间】:2013-03-20 08:10:48
【问题描述】:

所以我有一个基本模板,其中包括一个标题:

base.html

{% include "header.html" %}

header.html

<ul>
     <li><a>Link</a></li>
     <li><a>Link</a></li>
     <li><a>Link</a></li>
</ul>
{% block diskspace %}Test{% endblock %}

然后我想从扩展基础的模板中覆盖diskspace 块,例如:

album.html

{% extends "base.html" %}
{% block diskspace %}
<p>You need more space!</p>
{% endblock %}

不幸的是,diskspace 仅包含“测试”并且未被覆盖。

我正在尝试的可能吗,还是我需要走另一条路?

解决方案

根据下面 sergzach 的回答,这是我最终实现的:

header.html:

<ul>
     <li><a>Link</a></li>
     <li><a>Link</a></li>
     <li><a>Link</a></li>
</ul>
{% if show_diskspace %}
    <p>You need more space!</p>
{% endif %}

base.html

{% block header %}
    {% include "header.html" %}
{% endblock %}

album.html

{% extends "base.html" %}
{% block header %}
    {% include "header.html" with show_diskspace="True" %}
{% endblock %}

【问题讨论】:

  • 您要替换“测试”还是附加一些内容?
  • 替换。从技术上讲,该块应该是空的,我只有“测试”,所以我知道是否对该块采取了任何行动。
  • 包含模板中的块不能在包含它们的模板中被覆盖。
  • 啊是的,好像是这样,我想我会尝试另一条路线,谢谢你的尝试:)
  • 我已经更新了我的答案。请看那个。

标签: python django django-templates django-1.4


【解决方案1】:

header.html

    <ul>
         <li><a>Link</a></li>
         <li><a>Link</a></li>
         <li><a>Link</a></li>
    </ul>

{{diskspace}}

base.html

{% block header %}
    {% include "header.html" with diskspace='Test'%}
{% endblock %}

album.html

{% extends "base.html" %}
{% block header %}
    {% include "header.html" with diskspace='<p>You need more space!</p>'|safe %}
{% endblock %}

【讨论】:

  • 嗯,磁盘空间旨在包含更复杂的 HTML,但您的回答最终让我到达了我需要的地方。我将更新问题以反映我的解决方案。谢谢
  • @DanH 您可以将 html 的所有变体放入 header.html 并传递给它的不是 html 字符串而是当前选项的标识符。
猜你喜欢
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多