Не удается получить истинное условие, если оно вызывается в шаблоне Django

avatar
user3605767
9 августа 2021 в 05:03
66
1
0

Я пытаюсь стилизовать различные теги своих сообщений в блоге, запуская условие if, которое просто проверяет имя тега и выполняет стиль, который я хочу для этого конкретного тега. Похоже, что условие должно проверяться как True, но выполняется только код в предложении else.

В приведенном ниже примере мой тег «Новости» должен иметь основной значок значка класса, но вместо этого он подпадает под else и применяет значок дополнительного значка.

Я пробовал прописные и строчные буквы. Я также пробовал со счетчиком и без него, который предназначен для других целей. Тем не менее, не повезло.

Шаблон:

{% 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 %}

Это работает, и тег заполнит первый класс span, как и должен. Я считаю, что это говорит мне о том, что синтаксис, который я использую, правильный. По какой-то причине мое условие == не отображается как True, хотя должно быть.

Для дальнейшей проверки я запустил оболочку, чтобы убедиться, что я использую правильные имена тегов.

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 для своего представления.

Спасибо!

Источник
incrediblegiant
9 августа 2021 в 06:57
0

Каково значение {{ tag }}, когда речь идет о вторичном значке?

user3605767
9 августа 2021 в 20:03
0

«Новости» отображаются для вторичного значка. Каким-то образом он имеет значение False в начальном условном выражении и вместо этого выполняет блок else.

Ответы (1)

avatar
incrediblegiant
10 августа 2021 в 03:40
1

tag является объектом, когда мы итерируем object.tags.all, поскольку вызов .all() возвращает QuerySet, содержащий все объекты Tag.

Вместо этого вы можете попробовать tag.name == "Новости"

user3605767
14 августа 2021 в 22:10
0

Спасибо, теперь это имеет смысл.