13

I've got following model:

items: {
    someId1: 
        {
            property1....
        },
    someId2: {...},
    someIdN: {...}
}

I would like to get a for-loop in my template (nunjucks) which goes through all the "someId's". Does anyone have any idea how? A normal for-loop does not work since it's not an array and since I use the "someId.." for a reference in another template I cannot put it to an array.

Any help would be awesome.

Tikkes
  • 4,219
  • 4
  • 30
  • 57

2 Answers2

34

This answer is actually right on the Nunjucks homepage:

<ul>
   {% for name, item in items %}
      <li>{{ name }}: {{ item }}</li>
   {% endfor %}
</ul>

In your case this would be:

<ul>
   {% for someId, item in items %}
      <li>{{ someId }}: {{ item.property1 }}</li>
   {% endfor %}
</ul>

As you can use the for loop for arrays and object/hashes.

Rich
  • 5,316
  • 9
  • 35
  • 58
Jasper Moelker
  • 1,000
  • 10
  • 9
  • 1
    I was just looking through a similar problem with a coworker. This does what we want, but one problem with the solution is that, because this is javascript, the order of the looping cannot be guaranteed. http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – Josh Brown Apr 14 '16 at 17:10
1

You can use nested loops like this:

<ul>
  {% for item in items %}
    {% for something in item.someId1 %}
      <li>
        {{ something.property1 }}
      </li>
    {% endfor %}
  {% endfor %}
</ul>

For this json object:

items: {
  someId1: {
    property1: "It makes you want to shout! Raise your hands up and..."
  },
  someId2: {...},
  someIdN: {...}
}
KyleMit
  • 45,382
  • 53
  • 367
  • 544