Сравнивается ли ifjz в django с последним значением в цикле или последним значением, когда if if был последний раз оценен? - PullRequest
1 голос
/ 10 ноября 2010

У меня возникли проблемы с системным тегом 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 изменился, иногда «элемент активен!» не будет отображаться.

Это наводит меня на мысль, что если изменено, проверяется только последнее значение, оцененное при изменении, а не последнее значение в цикле forloop. Это правильно?

Если это так, мне, возможно, придется прыгнуть через несколько обручей, чтобы сделать эту работу.

Спасибо.

1 Ответ

1 голос
/ 11 ноября 2010

Что ж, потратив несколько часов на ковыряние и (плохо) просматривая код 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 оценивается каждый раз, и «элемент активен!» отображается как следует. В какой-то момент это может привести к «получению», в зависимости от того, работает ли «c.group» между обоими проверенными тестами. Я не уверен, но это работает для меня до сих пор.

Надеюсь, это поможет кому-нибудь еще, кто окажется в этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...