假设我的 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/