Q:

How do you index on a jinja template?

I'm passing 3 lists to my jinja template through my python file.
list1 = [1,2,3,4]
list2 = ['a','b','c','d']
list3 = [5,6,7,8]

All these values correspond with eachother, so 1 matches with 'a' and 5, 2 with 'b' and 6, etc.
In my template I'm printing them out on the same line. 
How do I do numerical indexing to print them out?
As so
1 a 5
2 b 6
3 c 7

The only thing I know is directly accessing the object through the loop like
 {%for item in list%}
    {{item}}

A:

If you really want the index, you could just loop on one of the variables and then uses Jinja's loop.index0 feature (returns the current index of the loop starting at 0 (loop.index does the same thing, starting at 1)
For example:
{% for item in list1 %}

    {{ item }}
    {{ list2[loop.index0] }}
    {{ list3[loop.index0] }}

{% endfor %}

This assumes your lists are all asserted to be the same length before setting the template, or you'll encounter problems. 

A:

Two ways:

In your code that calls Jinja simply zip your lists:
data = zip(list1, list2, list3)
# data is now a list of tuples
# [(1, 'a', 5), (2, 'b', 6), etc.]

Then, in your template you can simply loop over the nested rows:
{# your_template.jinja #}
<table>
{% for row in data %}
    <tr>
    {% for cell in row %}
        <td>{{ cell }}</td>
    {% endfor %}
    </tr>
{% endfor %}
</table>

As an alternate, if you only want to use Jinja you can use the special loop variable:
<table>
{% for cell in list1 %}
    <tr>
        <td>{{ list1[loop.index0] }}</td>
        <td>{{ list2[loop.index0] }}</td>
        <td>{{ list3[loop.index0] }}</td>
    </tr>
{% endfor %}
</table>

