Django Джинджа - если объект во всех объектах имеет атрибут, запустите html - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужна помощь, чтобы понять, как написать код для этой проблемы (в заголовке).

Допустим, у меня есть эта модель:

from django.db import models

class Section(models.Model):
    name = models.CharField(max_length=20)
    display = models.BooleanField(default=True)

, и я создаю 2 объекта с разные имена и 2 разные переменные отображения:

>>> s1.display
True
>>> s2.display
False

Здесь у меня есть некоторый код HTML с Jinja-шаблонами для отображения этого кода, если эти объекты вообще существуют:

<!-- In Views, Section.objects.all() is 'sections' -->

{% if sections %}
<div class="all-sections">
  <h2 class="title">Explore</h2>
  {% for section in sections %}
  <div class="section">
    <p class="section-title">{{ section.name }}</p>
  </div>
  {% endfor %}
</div>
{% endif %}

Сейчас Я делаю их обоих ложными:

>>> s1.display = False
>>> s1.save()

Теперь, если ВСЕ ИХ ПОКАЗЫВАЮТ ЛОЖЬ Я не хочу, чтобы весь раздел был там, так же, как если бы там не было любой в этом списке вообще.

Я думал о создании для l oop и итерации по каждому из них, но тогда это просто повторило бы весь код HTML для каждого, у которого действительно отображалось.

<!-- Wouldn't Work Example -->
{% if sections %}
  {% for section in sections %}
    {% if section.display %}
      <div class="all-sections">
        <h2 class="title">Explore</h2>
        {% for section in sections %}
          <div class="section">
            <p class="section-title">{{ section.name }}</p>
          </div>
        {% endfor %}
      </div>
    {% endif %}
  {% endfor %}
{% endif %}

Как бы вы поступили так, чтобы весь раздел не отображался, если есть объекты, но ни один из них не имеет «display = True»?

1 Ответ

1 голос
/ 21 апреля 2020

Лучше всего фильтровать набор запросов в представлении, а не в шаблоне.

qs = Section.objects.filter(display=True)

Передать этот набор запросов как контекст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...