Get both the key and the index using Jade iteration

Just to add to this already answered question, I wasn't able to get any of these to work reliably with PyJade. I can't find the page that referred me to this tip, but it's worked perfectly for me.

Add this to your __init__.py file to added the enumerate function to your pyjade environment.

app.jinja_env.globals.update(enumerate=enumerate)

Then, you can use it in your templates like any other pythonic enumeration loop:

for idx, val in enumerate(list_of_whatevs)
    {{ idx }}, {{ val }}

Cheers


I think you only get an index if you are iterating over an array, so the jade documentation is a little confusing with its example. I'll give you three options for how to accomplish this. Choose your own adventure!

option 1: Keep your original input and build your own index

ul
  -var index = 0
  each val, key in {day: "Wed", link: "url", message: "three"}
    li(id="item-#{index++}") #{key}: #{val}

option 2: Change your input to an array of arrays

ul
  each val, index in [["day", "Wed"], ["link", "url"], ["message", "three"]]
    li(id="item-#{index}") #{val[0]}: #{val[1]}

option 3: Change your input to an array of objects

ul
  each val, index in [{day: "Wed"}, {link: "url"}, {message: "three"}]
    li(id="item-#{index}") #{Object.keys(val)[0]}: #{val[Object.keys(val)[0]]}

The first option is probably what you want, but the others may be interesting to read.