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

Django项目中模板if语句失效,如何排查修复?

问题分析与解决方案

核心问题

你模板里的外层{% if leads.lead_status == "Active Deal" %}逻辑错误:leads是ListView传递的QuerySet(结果集/列表),并非单个Lead对象,它没有lead_status属性,这个判断永远不成立,导致内部的for循环完全不执行,页面自然没有数据展示。

两种修复方案

方案1:在模板内逐个判断Lead状态

把状态判断放到for循环内部,对每个Lead对象单独校验:

{% for lead in leads %}
    {% if lead.lead_status == "Active Deal" %}
        <tr>
            <td data-href="{% url 'leads:lead-detail' lead.pk %}"><i class="far fa-paper-plane"></i> {{ lead.id }}</td>
            <td>{{ lead.first_name|title }} {{ lead.last_name|title }}</td>
            <td>{{ lead.city|title }}</td>
            <td>{{ lead.state|upper }}</td>
            <td data-href="tel:{{ lead.phone }}">{{ lead.phone }} <i class="fas fa-phone-square"></i> </td>
            <td>$34,567.89</td>
            <td> 
                {% if not lead.contract_out %}
                --/--/----
                {% else %}
                {{ lead.contract_out }} 
                {% endif %}
            </td>
            <td>
                {% if not lead.contract_back %}
                --/--/----
                {% else %}
                {{ lead.contract_back }}
                {% endif %}
            </td>
            <td>
                {% if not lead.hearing_date %}
                --/--/----
                {% else %}
                {{ lead.hearing_date }}
                {% endif %}
            </td>
        </tr>
    {% endif %}
{% endfor %}

注:把{% if lead.contract_out == "" %}改成{% if not lead.contract_out %}更简洁,符合Django模板的空值判断习惯

方案2:在View层提前过滤数据(推荐)

直接在数据库层面过滤出lead_status为"Active Deal"的Lead,减少不必要的数据传输,模板逻辑更简洁:

修改views.py的get_queryset方法:

def get_queryset(self):
    user = self.request.user
    # 新增lead_status过滤条件,用模型常量避免硬编码
    queryset = Lead.objects.filter(agent__user=user, lead_status=Lead.ACTIVE)
    return queryset

然后模板里去掉外层无效的if判断,直接遍历即可:

{% for lead in leads %}
    <tr>
        <td data-href="{% url 'leads:lead-detail' lead.pk %}"><i class="far fa-paper-plane"></i> {{ lead.id }}</td>
        <td>{{ lead.first_name|title }} {{ lead.last_name|title }}</td>
        <td>{{ lead.city|title }}</td>
        <td>{{ lead.state|upper }}</td>
        <td data-href="tel:{{ lead.phone }}">{{ lead.phone }} <i class="fas fa-phone-square"></i> </td>
        <td>$34,567.89</td>
        <td> 
            {% if not lead.contract_out %}
            --/--/----
            {% else %}
            {{ lead.contract_out }} 
            {% endif %}
        </td>
        <td>
            {% if not lead.contract_back %}
            --/--/----
            {% else %}
            {{ lead.contract_back }}
            {% endif %}
        </td>
        <td>
            {% if not lead.hearing_date %}
            --/--/----
            {% else %}
            {{ lead.hearing_date }}
            {% endif %}
        </td>
    </tr>
{% endfor %}

额外检查点

  1. 确认数据库中存在lead_status设为"Active Deal"、且关联agent为当前登录用户的Lead记录
  2. 若使用方案2,确保模型中的ACTIVE常量值与数据库存储的一致(你模型里的ACTIVE = 'Active Deal'是正确的)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:09:27