0

I am populating a list in my view:

hits_object = {} hits_object['Studio'] = hitlist('Studio',days) hits_object['Film'] = hitlist('Film',days) hits_object['Actor'] = hitlist('Actor',days) hits_object['Historical Event'] = hitlist('Event',days) hits_object['Pop Culture'] = hitlist('Pop_Culture',days) 

Then I am displaying it in my template:

{% for model, hits in hits_object.items %} {% if hits %} <u> Most {{ model }} views in last {{ days }} days</u> <ol> {% for hit in hits %} <li>{{ hit.name }} - {{ hit.count }}</li> {% endfor %} </ol> </u> {% endif %} {% endfor %} 

The problem is that the models display in a seemingly random order: first Actor, then Studio, Historical Event, Film, etc.

How can I force the for loop in the template to iterate the object in a specific order?

2 Answers 2

2

Dictionaries are unordered. If you need to preserve insertion order, use an ordered dict implementation - there's one in django.utils.datastructures.SortedDict, for example.

Or, since you don't seem to be using the key of the dictionary but are just iterating through, appending to a simple list would seem to be easier.

Sign up to request clarification or add additional context in comments.

Comments

0

As Daniel explained, dictionaries are accessed randomly. Here is one way to do what you want:

hits_object = list() hits_objects.append( (hitlist('Studio',days), hitlist('Film',days), hitlist('Actor',days), hitlist('Event',days), hitlist('Pop_Culture',days)) 

In your view:

{% for studio,film,actor,event,pop_culture in hits_objects %} # do something... {% endfor %} 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.