当我在 for 中有一个 if 时,Django 模板检查是不是为空

Posted

技术标签:

【中文标题】当我在 for 中有一个 if 时,Django 模板检查是不是为空【英文标题】:Django template check for empty when I have an if inside a for当我在 for 中有一个 if 时,Django 模板检查是否为空 【发布时间】:2012-05-02 12:36:24 【问题描述】:

我的模板中有以下代码:

% for req in user.requests_made_set.all % % 如果不是 req.is_published % 要求 % 万一 % % 空的 % 没有请求 % endfor %

如果有一些请求但没有 is_published = True 那么我如何输出消息(如“无请求”)?我只想使用 Django 模板而不是在我看来这样做!

谢谢

【问题讨论】:

您可以使用***.com/questions/844746/…来检查req中是否存在属性。 【参考方案1】:

即使这可能在模板中实现,我(可能还有许多其他人)会建议不要这样做。为此,您基本上需要找出数据库中是否有任何对象符合某些条件。这当然不属于模板。

模板旨在用于定义内容的显示方式。您正在解决的任务是确定要显示的内容。这绝对属于视图而不是模板。

如果您不想仅仅因为希望信息出现在每个页面上而避免将其放置在视图中,而不管视图如何,请考虑使用上下文处理器,它会自动将所需信息添加到您的模板上下文中,或者编写一个模板标签可以为你解决这个问题。

【讨论】:

好吧,我可能会创建一个模板标签。我只是认为这应该是可能的,因为 django 已经有 % empty % 标记... 是的,只有% empty % 检查上下文中的可迭代对象是否为空。不是它的过滤子集。此外,代码不是最理想的。想象一下requests_made_set 包含数千个请求,但只有少数几个被发布。实际上,当您只需要一个子集时,您会遍历所有这些。你肯定想在数据库级别过滤它。 也许你是对的。快速提问:如果我创建一个名为 only_published 的模板过滤器,它接受一个查询集(user.requests_made_set.all 查询集)并使用它来过滤请求 % for req in user.requests_made_set.all|only_published % 会起作用吗?另外,如果我使用它,是否只会显示已发布的请求(惰性评估)?谢谢!

以上是关于当我在 for 中有一个 if 时,Django 模板检查是不是为空的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 模板中从 for 循环中转义一行

Django:在一个视图中有超过 3 个模型时出错

如何在 Django 模板语言中正确构建 for 循环

django 显示文本字段

Python/Django - 在 for 标记中获取 ManyToManyField 的值

在 django 中更新表单数据