python - 如何将 Django 查询设置为列明智地呈现到 html 表中?

标签 python django html-table django-templates django-views

假设我的 sql 表看起来像这样..

产品表

--------------------------------
| id | Model| Manufacturer     |
--------------------------------
| 1  | ABC  | Samsung          |
| 2  | XYZ  | LG               | 
| 3  | ZYX  | Sony             |
--------------------------------

在 Django View 中,我从该表中获取所有记录并将其传递给模板..
def compare(request):
    product_ids = request.GET.get('product_ids')
    products = Product.objects.filter(id__in=product_ids)
    return render(request, 'compare.html', {'products': products})

由于 query_set 结果记录一个接一个地出现,我们可以说它是按行进行的,但是对于模板中的这种情况,我想创建一个 html 表,结果应该是这样的..
--------------------------------------------
|id           | 1       | 2        | 3     |
|Model        | ABC     | XYZ      | ZYX   |
|Manufacturer | Samsung | LG       | Sony  |
--------------------------------------------

通过查看上面的示例,您可以看到数据是按列呈现的。

所以请在 Django 中给我建议一个更好的方法,我可以通过它来实现这一点,如果我是 Django 的初学者,如果我错了,请纠正我。

提前致谢

最佳答案

使用 values_list() 并将您的查询集转换为列表

products = list(Product.objects.filter(id__in=product_ids).values_list('id', 'Model', 'Manufacturer'))
# OUTPUT: [(1, 'ABC', 'Samsung'), (2, 'XYZ', 'LG'), (3, 'ZYX', 'Sony')]

现在使用 zip 转置这个二维矩阵
t_products = list(zip(*products))
# OUTPUT: [(1, 2, 3), ('ABC', 'XYZ', 'ZYX'), ('Samsung', 'LG', 'Sony')]

最后你可以在你的模板中循环它
<table>
  <tbody>
    {% for pl in t_products %}
    <tr>
      {% for l in pl%}
         <td>{{l}}</td>
      {% endfor %} 
    </tr>
    {% endfor %}
  </tbody>
</table>

关于python - 如何将 Django 查询设置为列明智地呈现到 html 表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47492516/

相关文章:

HTML 电子邮件 - Firefox 和 PC 上的 hotmail 中的单元格中的额外填充

python - 创建一个函数来标准化分类变量 (python)

python - Pandas 结合切片和列表来选择列

python - 使用相同的附件在 Django 中发送批量电子邮件

python - 如何在 Django 上运行类似 cron 的脚本?

css - 制作div(显示: table) match outer container's height width min-height

python - numpy.bool _' object has no attribute ' 参数'

python - 代码完成例如Numpy、SciPy 或 Matplotlib 在 Eclipse PyDev 中不起作用

python - 在基类 python/django 上调用 super

html - 类似于 "table-layout:fixed"但仅适用于一个表列