我在我的视图中填写了一个列表:
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)
然后我在我的模板中显示它:
{% 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 %}
问题在于模型以看似随机的顺序显示:第一个演员,然后是工作室,历史事件,电影等。
如何强制模板中的for循环按特定顺序迭代对象?
答案 0 :(得分:2)
字典无序。如果您需要保留插入顺序,请使用有序的dict实现 - 例如django.utils.datastructures.SortedDict
中有一个。
或者,既然你似乎没有使用字典的键但只是迭代,那么附加到一个简单的列表似乎会更容易。
答案 1 :(得分:0)
丹尼尔解释说,字典是随机访问的。这是一种做你想做的事情的方法:
hits_object = list()
hits_objects.append(
(hitlist('Studio',days),
hitlist('Film',days),
hitlist('Actor',days),
hitlist('Event',days),
hitlist('Pop_Culture',days))
在您看来:
{% for studio,film,actor,event,pop_culture in hits_objects %}
# do something...
{% endfor %}