Django detail.html模板如何正确编写if语句判断项目是否关联任务
Django模板项目关联任务判断正确写法
核心原理
你的Task模型中关联Project的外键设置了related_name="tasks",单个Project实例可通过project.tasks反向获取所有关联的任务集合,直接判断该集合是否存在即可实现需求。
分场景代码实现
场景1:项目详情页(detail.html,对应单个项目对象)
直接判断当前项目的关联任务是否存在,优先用exists()方法提升查询效率:
{% if project.tasks.exists %} <!-- 下方替换为你的任务表格代码 --> <table> <thead> <tr> <th>任务名称</th> <th>开始时间</th> <th>截止时间</th> <th>状态</th> <th>负责人</th> </tr> </thead> <tbody> {% for task in project.tasks.all %} <tr> <td>{{ task.name }}</td> <td>{{ task.start_date }}</td> <td>{{ task.due_date }}</td> <td>{{ task.is_completed|yesno:"已完成,进行中" }}</td> <td>{{ task.assignee|default:"未分配" }}</td> </tr> {% endfor %} </tbody> </table> {% else %} <p>该项目暂无任务</p> {% endif %}
注:使用Django默认的DetailView时,会自动将单个Project实例以
project为变量名传入模板,无需额外配置上下文。
场景2:项目列表页(list.html,遍历所有项目渲染)
如果是在列表页循环输出每个项目的信息,需要在循环内部对单个项目做判断:
{% for project in projects_list %} <div class="project-item"> <h3>{{ project.name }}</h3> {% if project.tasks.exists %} <!-- 对应项目的任务表格,循环逻辑同详情页 --> {% else %} <p>该项目暂无任务</p> {% endif %} </div> {% endfor %}
之前写法错误说明
{% if task in project %}:未提前定义task变量,且in关键字用于判断左侧元素是否属于右侧集合,从属逻辑写反{% if task in projects_list %}:projects_list是所有项目的集合,判断任务是否属于项目集合完全不符合业务逻辑{% if tasks in project %}:未指定tasks的来源,视图没有单独传递tasks上下文变量时模板无法识别该值,判断自然失效
内容的提问来源于stack exchange,提问作者ImDeez
相关产品推荐
相关产品推荐

