【问题标题】:Django Jinja - If an object in all objects has attribute run htmlDjango Jinja - 如果所有对象中的一个对象都有属性运行 html
【发布时间】:2020-04-21 16:50:12
【问题描述】:

我需要帮助弄清楚如何为这个问题编写代码(在标题中)。

假设我有这个模型:

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

这里我有一些带有 Jinja 模板的 HTML 代码,如果这些对象存在的话,我会显示这些代码:

<!-- 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()

现在,如果所有这些都显示为 FALSE,我不希望整个部分都在那里,就像该列表中根本没有任何部分一样。

我曾想过做一个 for 循环并遍历每个循环,但那样只会重复每个确实显示的 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”,您将如何处理整个部分不显示的情况?

【问题讨论】:

    标签: django django-views jinja2


    【解决方案1】:

    最好在视图中过滤查询集而不是在模板中。

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

    将此查询集作为上下文传递。

    【讨论】:

    • 你先生,是神。谢谢!我完全忽略了使用过滤器预先定义它。
    猜你喜欢
    • 1970-01-01
    • 2023-02-07
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    相关资源
    最近更新 更多