Сбой сравнения переменной шаблона Django со строковым литералом - PullRequest
13 голосов
/ 17 сентября 2010

У меня есть следующий код в моем шаблоне, который должен сравнивать значение watchinstance.shift, которое может быть «ДЕНЬ» или «НОЧЬ», с литеральной строкой «ДЕНЬ».Сравнение всегда терпит неудачу.

{% for watchinstance in watchinstance_list %}
    {% if watchinstance.shift == "DAY" %}
        <p>shift is DAY</p>
    {% endif %}
{% endfor %}

Использование ifequal также не работает:

{% for watchinstance in watchinstance_list %}
    {% ifequal watchinstance.shift "DAY" %}
        <p>shift is DAY</p>
    {% endifequal %}
{% endfor %}

Однако, просто вызов {{ watchinstance.shift }} работает должным образом:

{% for watchinstance in watchinstance_list %}
    {{ watchinstance.shift }}
{% endfor %}

возвращает ДНИ и НОЧИ.

Я проверил, возвращает ли watchinstance.shift какие-либо дополнительные символы, и это не похоже на то, что происходит ... Чего еще мне здесь не хватает?

Ответы [ 2 ]

43 голосов
/ 17 сентября 2010

Итак, после поиска Django docs в течение 2 часов, я наконец нашел способ заставить его работать:

{% if watchinstance.shift|stringformat:"s" == "DAY"  %}
10 голосов
/ 17 сентября 2010

Пара возможностей:

  1. . Строка .shift имеет дополнительный пробел.Используйте это, чтобы перепроверить:

    {% for watchinstance in watchinstance_list %}
        X{{ watchinstance.shift }}X
    {% endfor %}
    
  2. Атрибут .shift не строка, а объект, который переводится в «DAY» или «NIGHT».В этом случае подстановка переменной в {{ watchinstance.shift }} будет выглядеть так же, как строка, но сравнение в {% ifequal watchinstance.shift "DAY" %} завершится неудачей.

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