Значение переменной шаблона Django для сравнения строковых литералов не выполняется
У меня есть следующий код в моем шаблоне, который должен сравнивать значение 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 %}
возвращает DAYs и NIGHT.
Я проверил, возвращает ли watchinstance.shift
лишние символы, и это не похоже на то, что он делает... Что еще я могу здесь пропустить?
Ответы
Ответ 1
Несколько возможностей:
-
Строка .shift имеет дополнительные пробелы. Используйте это для двойной проверки:
{% for watchinstance in watchinstance_list %}
X{{ watchinstance.shift }}X
{% endfor %}
-
Атрибут .shift - это не строка, а объект, который привязывается к "Дню" или "НОЧЬ". В этом случае подстановка переменных в {{ watchinstance.shift }}
будет выглядеть так же, как строка, но сравнение в {% ifequal watchinstance.shift "DAY" %}
не получится.
Ответ 2
Итак, после поиска Django docs в течение 2 часов, я наконец нашел способ заставить его работать:
{% if watchinstance.shift|stringformat:"s" == "DAY" %}