在 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.py
的ExtendsNode
类的这一行看到这一点:
self.blocks = n.name: n for n in nodelist.get_nodes_by_type(BlockNode)]
当% extends %
被渲染时,它直接从模板中获取所有块节点并存储它们以在父遇到那些block
s时进行渲染。不考虑孩子中的这些块是否在条件内。
【讨论】:
以上是关于在 if 条件内调用块:django 模板的主要内容,如果未能解决你的问题,请参考以下文章
django - 使用间隔的 AJAX 调用刷新模板中的 JSON 数据
你是如何调用 wait()方法的?使用 if 块还是循环?为什 么?