Не удается добиться срабатывания условия true if в Django Template
Я пытаюсь стилизовать различные теги записей блога, выполняя условие if, которое просто проверяет название тега и выполняет стиль, который я хочу для этого конкретного тега. Похоже, что условие должно проверять True, но выполняется только код в пункте else.
В примере ниже мой тег "News" должен иметь класс badge badge-primary, но вместо этого он попадает под else и применяет badge badge-secondary.
Я пробовал верхний и нижний регистр. Я также пробовал со счетчиком и без него, который используется для других целей. И все равно не получилось.
Шаблон:
{% for tag in object.tags.all %}
{% if forloop.counter|divisibleby:"2" %}
{% if tag == "News" %}
<li>
<span class="badge badge-primary">{{ tag }}</span>
</li>
{% else %}
<li>
<span class="badge badge-secondary">{{ tag }}</span>
</li>
{% endif %}
{% endif %}
{% endfor %}
При замене:
{% if tag == "News" %}
With:
{% if tag in object.tags.all %}
Это работает, и тег заполняет первый класс span, как и должно быть. Я считаю, что это говорит мне о том, что синтаксис, который я использую, правильный. По какой-то причине мое условие == не воспринимается как True, хотя оно должно быть таковым.
Для дальнейшей проверки я запустил shell, чтобы убедиться, что я использую правильные имена тегов.
Tags.objects.all
Возвращенные (опустив несколько для краткости):
<QuerySet [<Tags: Reviews>, <Tags: News>, <Tags: Tech>]>
Модель:
class Tags(model.Model):
name = models.CharField(max_length=70, default='general')
slug = models.SlugField(max_length=200, null=True, blank=True)
def __str__(self):
return self.name
Я использую общий DetailView для своего представления.
Спасибо!
tag является объектом, когда мы итерируем object.tags.all, поскольку вызов .all() вернет QuerySet, содержащий все объекты Tag.
Вместо этого вы можете попробовать tag.name == "News"