gpt4 book ai didi

python - Django - 包含模型 'table' 的模板

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:40 24 4
gpt4 key购买 nike

这是我的问题:我想在模板中打印一个表格,其中包含每个字段的每个对象

这是我的解决方案:

views.py

def start(request):
all_rows = Person.objects.all()
all_fields_names = Person._meta.get_fields()
content = { 'all_rows': all_rows,
'all_fields_names': all_fields_names }

return render(request, 'start.html', content)

start.html

<table class="table table-striped table-hover table-responsive">
<thead>
{% for names in all_fields_names %}<th>{{ names.name |title }}</th>{% endfor %}
</thead>
<tbody>
{% for row in all_rows %}
<tr>
<td>{{ row.name }}</td>
<td>{{ row.yabadiba }}</td>
<td>{{ row.value1 }}</td>
<td>{{ row.value2 }}</td>
</tr>
{% endfor %}
</tbody>
</table>

一切都很完美。问题是,当我不知道类中有多少字段时。其次,我的解决方案打破了 DRY 规则。我试过:

getattr(row, names)

和嵌套循环,没有成功。有什么简单的解决办法吗?

此外:如何为每个类打印这样的 View ?

最佳答案

您需要的是values_list在您的 View 中查询,它在迭代时返回元组。每个元组包含传递到 values_list() 的相应字段或表达式的值:

all_fields_names = Mileage._meta.get_fields()   
value_fields = [f.name for f in all_fields_names]
all_rows = Mileage.objects.values_list(*(value_fields)) #pass fields to value_list

然后您可以在模板中使用嵌套for循环:

{% for row in all_rows %}
<tr>{% for value in row %}<td>{{ value }}</td>{% endfor %}</tr>
{% endfor %}

关于python - Django - 包含模型 'table' 的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44856197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com