确定循环的django模板中的迭代顺序

时间:2012-01-22 15:29:44

标签: django for-loop django-templates

我在我的视图中填写了一个列表:

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循环按特定顺序迭代对象?

2 个答案:

答案 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 %}