我一直试图在django模板中调用if条件中的块。
我有base template
。我有许多其他模板可以扩展基本模板。
我在基本模板中定义了一个块:
{% block test_block %}Test{% endblock %}
然后我想在其他模板中的某个条件上覆盖此块。如果条件失败,则不应覆盖该块。这就是我写的东西:
{% if test_value %}{% block test_block %}Development{% endblock %}{% endif %}
这实际上(或可能是虚拟的)忽略了if条件。
我最终做了什么:
{% block test_block %}{% if test_value %}Development{% else %}{{ block.super }}{% endif %}{% endblock %}
我必须在任何需要的地方做这样的事情。
这是最好的方法吗?这是唯一的方法吗?为什么我不能尝试我的第一种方式?或者我身边有什么错误吗?
答案 0 :(得分:16)
你没有犯错 - 包括模板块,无论它们周围是否存在任何条件。您可以在Django source code中的ExtendsNode
django/template/loader_tags.py
类的这一行中看到这一点:
self.blocks = dict([(n.name, n) for n in nodelist.get_nodes_by_type(BlockNode)])
当呈现{% extends %}
时,它直接从模板中提取所有块节点,并在父节点遇到block
时存储它们以进行呈现。不考虑孩子中的那些阻滞是否在条件内。