【问题标题】:Incorrect if statement in django templatedjango模板中的if语句不正确
【发布时间】:2015-05-14 10:08:24
【问题描述】:

我想列出仍在进行中和已完成的工作。 当所有工作都完成后 - “进行中”的工作列表将是空的。 目前我有这个代码,但它很糟糕。因为当我完成所有工作时,会有一个标题“进行中”。就在所有工作都在进行中的时候。

<h3>{% trans 'In progress' %}</h3>                        
{% for worked_on in worker.worked_on.all %}
    {% if worked_on.is_project_in_progress %}
       //Text here
    {% endif %}
{% endfor %}

我的模特:

class WorkerWorkedOnProduct(models.Model):
    worker = models.ForeignKey(Worker, verbose_name=_('Worker'), related_name='worked_on')
    description = models.TextField()
    is_project_in_progress = models.BooleanField(default=True)
    is_the_project_is_finished = models.BooleanField(default=False)

【问题讨论】:

    标签: python django templates if-statement django-templates


    【解决方案1】:

    你应该使用

    models.BooleanField(initial=True)
    

    而不是 'default',因为如果您设置 default=True,它将始终返回为 True。

    【讨论】:

    • 对于模型字段, default=True 实际上可以满足您的需求。 Initial=True 用于表单字段
    【解决方案2】:

    默认=True 很好,如果这是你想要的。实际上,您可能希望在视图中解决此问题。您可以做的一件事是获取“进行中”工作的查询集并将其放入视图中的模板上下文中。如果您这样做,您可以简单地测试它是否包含 any 对象,例如 {% if in_progress_stuff %}your_header{% endif %}

    【讨论】:

    • 我有这个,但问题仍然存在:` {% if is_project_in_progress %}

      {% trans 'In progress' %}

      {% endif %}`
    • 您正在循环通过 WorkerWorkedOnProduct 对象的查询集,所有这些对象可能会或可能不会打开布尔值。如果您希望 h3 仅在 all 对象处于相同状态时出现(无论是 True 还是 False,无论您想要什么),您应该只在视图中检查此条件,然后添加上下文的新布尔值
    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多