Django项目中如何为HTML表格指定列填充数据?
问题分析
你当前的代码存在两个核心问题:
- 把
myIDs和myNames拆成了两个独立的循环块,生成的是完全分开的行,导致名称数据无法和对应ID处于同一行。 - 嵌套
<tr>是无效的HTML结构,浏览器解析时会自动修正,最终导致数据全部偏移到第一列。
解决方案
方案1:后端整合数据(推荐)
在Django视图中将分散的列表整合成结构化数据,让前端模板可以直接循环每一行的完整数据:
# Django视图中的代码 context = { 'items': [ {'id': id_val, 'name': name_val, 'height': height_val} for id_val, name_val, height_val in zip(myIDs, myNames, myHeights) ] }
前端模板修改为:
<html> <body> <table border="1" cellpadding="5" cellspacing="5"> <tr> <th>IDs</th> <th>Names</th> <th>Heights</th> </tr> {% for item in items %} <tr> <td>{{ item.id }}</td> <td>{{ item.name }}</td> <td>{{ item.height }}</td> </tr> {% endfor %} </table> </body> </html>
方案2:前端用索引匹配(无需修改后端)
如果三个列表长度完全一致,可以通过Django模板的循环索引来匹配对应位置的元素。需要先自定义一个模板过滤器来支持列表索引:
- 在你的Django应用下创建
templatetags/custom_filters.py文件,写入以下代码:
from django import template register = template.Library() @register.filter def get_item(list_data, index): try: return list_data[index] except IndexError: return ''
- 前端模板中加载过滤器并使用:
{% load custom_filters %} <html> <body> <table border="1" cellpadding="5" cellspacing="5"> <tr> <th>IDs</th> <th>Names</th> <th>Heights</th> </tr> {% for id in myIDs %} <tr> <td>{{ id }}</td> <td>{{ myNames|get_item:forloop.counter0 }}</td> <td>{{ myHeights|get_item:forloop.counter0 }}</td> </tr> {% endfor %} </table> </body> </html>
内容的提问来源于stack exchange,提问作者taha khamis
相关产品推荐
相关产品推荐

