如何在Django模板中遍历字典的多个键

0 投票
2 回答
1271 浏览
提问于 2025-04-18 04:29

我在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>

撰写回答