Определить порядок итерации в шаблоне django для цикла - PullRequest
0 голосов
/ 22 января 2012

Я заполняю список на мой взгляд:

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 ]

2 голосов
/ 22 января 2012

Словари не упорядочены. Если вам нужно сохранить порядок вставки, используйте упорядоченную реализацию dict - например, в django.utils.datastructures.SortedDict она есть.

Или, поскольку вы, кажется, не используете ключ словаря, а просто просматриваете его, добавление в простой список может показаться более легким.

0 голосов
/ 22 января 2012

Как объяснил Даниил, словари доступны случайным образом. Вот один из способов сделать то, что вы хотите:

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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...