Iker Ocio Zuazo
Iker Ocio Zuazo

Reputation: 351

How can I iterate multiple key from a dictionary in Django template

I have given data from views to template in django. I want to iterate these multiple keys to build a html table.

views.py

data={'pacientes':p,'inicios':i,'finales':f,'enfermedad':enf} # p, i and f are lists
return render(request,'verEnf.html',data)

I want to do something like

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 is an object from 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)
    ...

and i is a string's list as

('20-2-2014', '12-2-2014', ..., '11-5-2014')

Upvotes: 0

Views: 1305

Answers (2)

Hasan-Uz-Zaman
Hasan-Uz-Zaman

Reputation: 11

Here is a working solution for similar task:

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

In 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})

Upvotes: 1

Alejandro Garcia
Alejandro Garcia

Reputation: 1221

I suppose that each index of paciente, inicio and finales are related between them.

Just as Ignacio says, you can write some code in the view, before passing it to the template in order to solve your problem. A possible solution could be packing the values in a list of tuples like this:

[
  (pacientes[0], inicios[0], finales[0]),
  (pacientes[1], inicios[1], finales[1]),
  ...
]

You can achieve this easily by using the zip function in your view:

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)

And in your template:

<table>
     {% for p,i,f in pacientes_data %}
        <tr>
            <td>{{ p.nombre }}</td>
            <td>{{ i }}</td>
            <td>{{ f }}</td>
        </tr>
     {% endfor %}
</table>

Upvotes: 2

Related Questions