Django嵌套';与';和';区块';标签
我有如下base.html模板:Django嵌套';与';和';区块';标签,django,Django,我有如下base.html模板: <p>{% block a %}{% endblock %}</p> <p>{% block b %}{% endblock %}</p> 但结果是: <p></p> <p></p> 而不是: <p>foo</p> <p>foo</p> foo 福 有什么解决方法吗?在继承的模板中,django查找块中的代
<p>{% block a %}{% endblock %}</p>
<p>{% block b %}{% endblock %}</p>
但结果是:
<p></p>
<p></p>
而不是:
<p>foo</p>
<p>foo</p>
foo
福
有什么解决方法吗?在继承的模板中,django查找
块
中的代码,这意味着它无法识别块之外的的存在。因此,您唯一的选择是在每个块中包含with
{% block a %}
{% with description="foo" %}
{{ description }}
{% endwith %}
{% endblock %}
虽然对于单个调用来说,不值得使用带有的,但唯一的其他选项是通过上下文传递说明,更新:对于我的特定情况,它不起作用。见评论
在阅读了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 %}
非常有趣的方法,我很惊讶它能工作,我猜是因为您定义了一个块,用于继承自index.html
的内容。我仍然想知道description
实际上是用来做什么的,但很高兴你发现了一些有用的东西!这一个的问题是,“包装块”内部以及“a”和“b”外部的任何内容都将在子模板中剥离。刚刚意识到。。。哎呀!我尝试对meta标记和opengraph标记使用相同的值,比如title和description。在某些页面中,这是在模板中定义的,只有几个单词长。我想使用一个变量来保持它的一致性。我想我还是要重复一遍。可能是的,描述的价值来自哪里?我仍然不明白为什么这需要在块内部完成,而不仅仅是在基本模板中完成。例如“description”的值不在上下文中,而是在模板中硬编码,并且每个子页面都有不同的描述。
{% extends "base.html" %}
{% block wrapping_block %}
{% with description='foo' %}
{% block a %}
{{ description }}
{% endblock %}
{% block b %}
{{ description }}
{% endblock %}
{% endwith %}
{% endblock %}