You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板中先判断对象集合非空再渲染内容?

Django模板判断集合非空的正确写法

你之前的{% if things.all not empty %}写法不符合Django模板语法,导致报错。以下是几种正确的实现方式:

方法1:直接判断QuerySet是否非空

Django模板中,空的QuerySet会被视为布尔值False,非空则为True,可以直接用if判断:

{% if things.all %}
    <h1>Things</h1>
    <ul>
        {% for thing in things.all %}
            <li>{{ thing.name }}</li>
        {% endfor %}
    </ul>
{% else %}
    <li>Sorry, nothing to see here</li>
{% endif %}

方法2:使用exists()方法(更高效)

如果things.all是数据量较大的QuerySet,使用exists()方法仅检查是否存在数据,无需加载全部对象,性能更优:

{% if things.all.exists %}
    <h1>Things</h1>
    <ul>
        {% for thing in things.all %}
            <li>{{ thing.name }}</li>
        {% endfor %}
    </ul>
{% else %}
    <li>Sorry, nothing to see here</li>
{% endif %}

方法3:结合for循环的empty标签

如果想保留原循环的empty逻辑,同时控制标题显示,可将标题放在外层if判断中:

{% if things.all %}
    <h1>Things</h1>
{% endif %}
<ul>
    {% for thing in things.all %}
        <li>{{ thing.name }}</li>
    {% empty %}
        <li>Sorry, nothing to see here</li>
    {% endfor %}
</ul>

错误原因说明

Django模板的if标签不支持not empty这种语法结构,正确的布尔判断逻辑是直接检查对象本身的“真实性”,或调用专门的判断方法(如exists())。

内容的提问来源于stack exchange,提问作者BLimitless

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:32:40