我一直遇到django的模板系统标签'ifchanged'的问题。我无法确定它的行为。
基本上,如果我有这样的设置:
{% for c in list %}
{% ifchanged c.group %}
group has changed!
{% else %}
{% ifchanged c.active %}
item is active!
{% endifchanged %}
{% endifchanged %}
{% endfor %}
如果c [0]的c.group发生了变化,那么c [1]没有,但c.active已经改变,有时“项目有效!”不会出现。
这让我相信ifchanged只会检查ifchanged评估的最后一个值,而不是forloop中的最后一个值。这是对的吗?
如果是这样的话,我可能不得不跳过一些箍来完成这项工作。
感谢。
答案 0 :(得分:1)
好吧,经过花费数小时修补和(差劲)查看django代码之后,我终于想出了一些有用的东西。我认为可以肯定地说,ifchanged与已经评估的内容一起工作,而不是循环中的最后一个值。
以下是适用于上述情况的代码示例:
{% for c in list %}
{% ifchanged c.group %}
group has changed!
{% endifchanged %}
{% ifchanged c.active %}
{% ifchanged c.group %}
{% else %}
item is active!
{% endifchanged %}
{% endifchanged %}
{% endfor %}
这样,每次都会评估c.active并且'item is active!'显示它应该。这可能会在某个时刻出现'陷阱',这取决于'c.group'是否在两个ifchanged测试之间起作用。我不确定,但到目前为止它对我有用。
希望这有助于其他任何人在这种情况下结束。