Django与'嵌套。和'阻止'标签

时间:2016-03-24 11:34:33

标签: django

我有 base.html 模板,如下所示:

<p>{% block a %}{% endblock %}</p>
<p>{% block b %}{% endblock %}</p>

index.html 模板:

{% extends "base.html" %}

{% with description="foo" %}
  {% block a %}{{ description }}{% endblock %}
  {% block b %}{{ description }}{% endblock %}
{% endwith %}

但结果变成了:

<p></p>
<p></p>

而不是:

<p>foo</p>
<p>foo</p>

有没有解决方法呢?

2 个答案:

答案 0 :(得分:5)

在您不喜欢的情况下,在继承的模板中,django会在blocks内查找代码,这意味着它无法识别您的with块在外面的存在这个的。因此,您唯一的选择是在每个块中包含with

{% block a %}    
    {% with description="foo" %}
        {{ description }}
    {% endwith %}    
{% endblock %}

虽然对于单个通话而言,使用with并不值得,但唯一的另一个选择是通过上下文传递description

答案 1 :(得分:2)

更新:它没有像我预期的那样工作。见评论。

在阅读了Sayse的回答并更好地了解了块的工作方式之后,我已经找到了这个解决方案:

base.html文件:

{% block wrapping_block %}
    {% block a %}
    {% endblock %}

    {% block b %}
    {% endblock %}
{% endblock %} 

的index.html:

{% extends "base.html" %}

{% block wrapping_block %}
    {% with description='foo' %}
        {% block a %}
            {{ description }}
        {% endblock %}

        {% block b %}
            {{ description }}
        {% endblock %}
    {% endwith %}
{% endblock %}