Django模板HTML表格仅显示表头无法展示模型属性如何解决?
问题根因
- 核心问题:模板未对关联任务集合做循环遍历。你只编写了单组表格行标签,Django模板不会自动迭代所有关联任务,且你直接引用的
task变量没有放在循环作用域内,无法获取到单个任务实例,自然不会渲染任务内容。 - 附带语法问题:表格最后一个单元格的闭合标签书写错误,将
</td>误写为</d>,会触发HTML渲染异常;另外表头的"Is compeleted"存在拼写错误,正确拼写为completed。
修复方法
- 确认视图传参:项目详情视图需要将当前项目实例传入模板上下文(常规项目详情页都会做这一步,变量名通常为
project)。由于你在Task模型的Project外键上配置了related_name="tasks",可以直接通过project.tasks.all反向获取当前项目下的所有任务集合,不需要额外编写数据库查询逻辑。 - 修改模板代码:添加Django模板的
for循环标签遍历任务集合,修正HTML标签错误与拼写问题,可选增加空状态提示、字段格式化优化展示效果。
修正后的完整模板代码如下:
<table> <tr> <th>Name</th> <th>Assignee</th> <th>Start Date</th> <th>Due Date</th> <th>Is completed</th> </tr> {% for task in project.tasks.all %} <tr> <td>{{ task.name }}</td> <td>{{ task.assignee|default:"未分配" }}</td> <td>{{ task.start_date|date:"Y-m-d H:i" }}</td> <td>{{ task.due_date|date:"Y-m-d H:i" }}</td> <td>{{ task.is_completed|yesno:"已完成,未完成" }}</td> </tr> {% empty %} <tr> <td colspan="5">当前项目暂无关联任务</td> </tr> {% endfor %} </table>
说明:代码中
default、date、yesno是Django模板内置过滤器,用于优化字段展示效果,不属于必填逻辑,可根据自身需求保留或删除。
内容的提问来源于stack exchange,提问作者ImDeez
相关产品推荐
相关产品推荐

