django模板中的if语句不正确

Posted

技术标签:

【中文标题】django模板中的if语句不正确【英文标题】:Incorrect if statement in django template 【发布时间】: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)

【问题讨论】:

【参考方案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,无论您想要什么),您应该只在视图中检查此条件,然后添加上下文的新布尔值

以上是关于django模板中的if语句不正确的主要内容,如果未能解决你的问题,请参考以下文章

如果评估的变量为 False,为啥我的 django 模板中的这个 IF 语句会执行?

Django模板if语句中的分组条件

我的 Django 模板中的“Else if”语句出现在 HTML 标头块之后

Django 模板中的错误:我可以在 if 语句中进行算术运算吗

Django将多个参数传递给If语句中的自定义模板过滤器

如何在 django 模板的 forloop 中访问 If 语句中的元组值?