Shr*_*riP 3 python django html-table
我是 Django 新手。我遇到了一个问题,我觉得这个问题超出了我目前在 Django 中的能力。问题在于使用表列的标题与其相关模型字段的字符串表示相同。为了进一步理解这一点,假设我有一个如下模型:
class Car(models.Model):
company_name = models.ForeignKey(Company,related_name='cars')
transmission_type = models.CharField(max_length=50)
color = models.CharField(max_length=25)
age = models.PositiveIntegerField(blank=True,null=True)
Run Code Online (Sandbox Code Playgroud)
对于这个模型,我想生成如下 HTML 表格:
<table>
<thead>
<th>Company Name</th>
<th>Transmission Type</th>
<th>Color</th>
<th>Age</th>
</thead>
<tbody>
<tr>
<td>{{company_name}}</td>
<td>{{transmission_type}}</td>
<td>{{color}}</td>
<td>{{age}}</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 Django 中实现这一目标?
您可以在视图中进行最重要的处理部分。例如:
def some_view(request):
model = Car
field_names = [f.name for f in model._meta.get_fields()]
data = [[getattr(ins, name) for name in field_names]
for ins in Model.objects.prefetch_related().all()]
return render(request, 'some_template.html', {'field_names': field_names, 'data': data})
Run Code Online (Sandbox Code Playgroud)
并作为some_template.html:
<table>
<thead>
{% for head in field_names %}
<th>{{ head }}</th>
{% endfor %}
</thead>
<tbody>
{% for row in data %}
<tr>
{% for cell in row %}
<td>{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
因此,我们为每个字段名称和每个模型实例构建一个二维表。然后我们在包含逻辑的 HTML 模板中呈现这些数据<table>。
编辑:使用verbose_name. 由于字段名称有时有点神秘,我们verbose_name也可以使用字段的 :
def some_view(request):
model = Car
field_names = list(model._meta.get_fields())
titles = [f.verbose_name for f in field_names]
field_Names = [f.name for f in field_names]
data = [[getattr(ins, name) for name in field_names]
for ins in Model.objects.prefetch_related().all()]
return render(request, 'some_template.html', {'field_names': titles, 'data': data})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2525 次 |
| 最近记录: |