如何在Django模板中遍历字典的多个键
我在Django中把数据从视图传递给模板。现在我想把这些多个键循环一遍,来生成一个HTML表格。
这是视图文件 views.py 的内容:
data={'pacientes':p,'inicios':i,'finales':f,'enfermedad':enf} # p, i and f are lists
return render(request,'verEnf.html',data)
我想做的事情大概是这样的:
这是模板文件 index.html 的内容:
<table>
{% for p, i, f in pacientes, inicios, finales %} # I know that this code is not work
<tr>
<td>{{ p.nombre }}</td>
<td>{{ i }}</td>
<td>{{ f }}</td>
<tr>
{% endfor %}
</table>
p是来自Pacientes的一个对象。
class Usuario(models.Model):
dni=models.CharField(max_length=9,primary_key=True)
clave=models.CharField(max_length=16)
nombre=models.CharField(max_length=30)
...
而i是一个字符串列表,内容如下:
('20-2-2014', '12-2-2014', ..., '11-5-2014')
2 个回答
1
这里有一个类似任务的可行解决方案:
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Model Name</th>
<th scope="col">Device Count</th>
</tr>
</thead>
<tbody>
{% for all_model in all_models %}
<tr>
<th scope="row">{{ forloop.counter }}</th>
<td>{{ all_model.0 }}</td>
<td>{{ all_model.1 }}</td>
</tr>
{% endfor %}
</tbody>
</table>
在 view.py 文件中
all_models = []
all_models_names = [1,2,3,4]
all_models_names_values = [1,2,3,4]
all_models = zip(all_models_names,all_models_names_values)
return render(request, "sample.html",{'all_models':all_models})
2
我想每个 paciente、inicio 和 finales 的索引之间是有关系的。
正如 Ignacio 所说,你可以在视图中写一些代码,然后再把它传递给模板,这样可以解决你的问题。
一种可能的解决方案是把这些值放进一个元组的列表里,像这样:
[
(pacientes[0], inicios[0], finales[0]),
(pacientes[1], inicios[1], finales[1]),
...
]
你可以很简单地通过在视图中使用 zip
函数来实现这一点:
pacientes_data = zip(p, i, f)
data={'pacientes_data':pacientes_data,'enfermedad':enf} # p, i and f are lists
return render(request,'verEnf.html',data)
然后在你的模板中:
<table>
{% for p,i,f in pacientes_data %}
<tr>
<td>{{ p.nombre }}</td>
<td>{{ i }}</td>
<td>{{ f }}</td>
</tr>
{% endfor %}
</table>