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

Posted

技术标签:

【中文标题】在 if 条件内调用块:django 模板【英文标题】:Calling block inside an if condition: django template 【发布时间】: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 %

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

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

【问题讨论】:

另见***.com/questions/942797/… 谢谢我已经为此苦苦挣扎了好几个小时 【参考方案1】:

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

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

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

【讨论】:

以上是关于在 if 条件内调用块:django 模板的主要内容,如果未能解决你的问题,请参考以下文章

django - 使用间隔的 AJAX 调用刷新模板中的 JSON 数据

django:在包含的模板中使用块

你是如何调用 wait()方法的?使用 if 块还是循环?为什 么?

我的 Django 模板中的“Else if”语句出现在 HTML 标头块之后

django:在包含的模板中使用块

Django:条件模板标签内的图像