Не удается добиться срабатывания условия 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"

Вернуться на верх