django的ifchanged是否与循环期间的最后一个值相比或者ifchanged最后一次计算时的最后一个值?

时间:2010-11-09 21:41:50

标签: django django-templates

我一直遇到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中的最后一个值。这是对的吗?

如果是这样的话,我可能不得不跳过一些箍来完成这项工作。

感谢。

1 个答案:

答案 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测试之间起作用。我不确定,但到目前为止它对我有用。

希望这有助于其他任何人在这种情况下结束。