我有 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>
有没有解决方法呢?
答案 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 %}