如果有条件在 Django 模板中触发,则无法获得 true

Can't get a true if conditional to trigger in Django Template

我正在尝试通过 运行 if 条件对我的不同博客 post 标签进行样式化,该条件仅检查标签的名称并为该特定标签执行我想要的样式。看起来条件应该检查​​ True,但只执行了 else 子句下的代码。

在下面的示例中,我的“新闻”标签应具有 class 徽章 badge-primary,但它属于 else 并应用徽章 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"  %}

有:

{% if tag in object.tags.all %}

有效,标签将按原样填充第一个跨度 class。我相信这告诉我我使用的语法是正确的。出于某种原因,我的 == 条件没有被视为 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。

谢谢!

当我们迭代 object.tags.all 时,

tag 是一个对象,因为调用 .all() 将 return 一个包含所有 Tag 对象的 QuerySet。

相反,您可以试试 tag.name == "News"