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

如何在HTML中访问Django QuerySet调用values_list返回的所有值?

问题原因

你现有代码的核心问题出在模板的渲染逻辑和标签语法上:

  • 内层循环嵌套<tr>标签,导致每个字段单独生成一行,而非一条记录对应一行
  • 行结束标签错误写为<tr>而非</tr>,浏览器渲染时会识别为无效标签,导致内容无法正常展示
解决方案

1. 后端代码调整(可选)

如果不需要展示每条记录的主键ID,可直接在查询时指定需要返回的字段,避免后续多余处理,且QuerySet本身支持模板遍历,不需要手动转为列表:

selected_user = User.objects.get(username=username)
# 按你需要展示的顺序填写对应模型字段名即可
all_mac = selected_user.userl.all().values_list('mac', 'region', 'system', 'ip', 'port')
return render(request, "users/showMachines.html", {'machines': all_mac})

2. 模板正确写法

如果后端已经过滤了多余的ID字段,直接用双层循环渲染即可,注意<tr>标签要包在整条记录的外层:

<table border="1">
  <!-- 可按需自定义表头 -->
  <thead>
    <tr>
      <th>MAC地址</th>
      <th>区域</th>
      <th>系统</th>
      <th>IP</th>
      <th>端口</th>
    </tr>
  </thead>
  <tbody>
    {% for machine in machines %}
    <tr>
      {% for field in machine %}
      <td>{{ field }}</td>
      {% endfor %}
    </tr>
    {% endfor %}
  </tbody>
</table>

如果保留了原查询的ID字段,需要跳过第一个元素,可直接按索引取值:

<tbody>
  {% for machine in machines %}
  <tr>
    <td>{{ machine.1 }}</td>
    <td>{{ machine.2 }}</td>
    <td>{{ machine.3 }}</td>
    <td>{{ machine.4 }}</td>
    <td>{{ machine.5 }}</td>
  </tr>
  {% endfor %}
</tbody>

3. 排查验证

如果修改后仍无内容,可先在视图函数中打印查询结果确认数据非空:

print(all_mac)

确认控制台有对应数据输出后,再排查模板路径是否正确、上下文变量名是否和模板中调用的名称一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:48:00