在if条件中调用块:django模板

时间:2012-08-23 09:02:12

标签: django django-templates

我一直试图在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 %}

我必须在任何需要的地方做这样的事情。

这是最好的方法吗?这是唯一的方法吗?为什么我不能尝试我的第一种方式?或者我身边有什么错误吗?

1 个答案:

答案 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时存储它们以进行呈现。不考虑孩子中的那些阻滞是否在条件内。