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

Question:

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')
Asked By: Iker Ocio Zuazo

||

Answers:

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>
Answered By: Alejandro Garcia

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})
Answered By: Hasan-Uz-Zaman
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.