【问题标题】:Calling block inside an if condition: django template在 if 条件内调用块:django 模板
【发布时间】:2012-08-18 18:25:40
【问题描述】:

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

我不得不在任何需要的地方做这样的事情。

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

【问题讨论】:

标签: django django-templates


【解决方案1】:

您没有犯错 - 模板块被包括在内,无论它们周围有任何条件。你可以从Django source codedjango/template/loader_tags.pyExtendsNode类的这一行看到这一点:

self.blocks = {n.name: n for n in nodelist.get_nodes_by_type(BlockNode)]}

{% extends %}被渲染时,它直接从模板中获取所有块节点并存储它们以在父遇到那些blocks时进行渲染。不考虑孩子中的这些块是否在条件内。

【讨论】:

    猜你喜欢
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2011-07-03
    相关资源
    最近更新 更多