Избегайте второй итерации в шаблоне Django - PullRequest
0 голосов
/ 18 ноября 2011

Я создал QuerySet в представлении.Мне нужно что-то сделать с одним из полей (точнее, разобрать в словаре).Итак, я перебираю QuerySet, чтобы выполнить мой анализ.Затем я беру свой новый объект (каким бы он ни был) и передаю его шаблону.Затем шаблон должен выполнить итерацию по объекту ... По сути, две итерации одной и той же информации.

Вот мой код представления:

t = Transaction.objects.values()
for r in t:
    r['data'] = dict([z.split(':',1) for z in r['data'].split('|')])

... Конечно, я передаюновое и улучшенное 't' в шаблоне, где происходит нечто подобное:

{% for r in t %}
    <tr>
    <td>{{ r.username }}</td><td>{{ r.source }}</td><td>{{ r.trans }}</td><td>{{ r.transtime }}</td>
    <td>
    {% for k,v in r.data.items %}
        {{ k }}: {{v}}<br>
    {% endfor %}
    </td>
    </tr>
{% endfor %}

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

Итак, вот мой вопрос: в django-world, как мне избежать циклического просмотра моих данных?дважды?Это нормально в Python-мире или есть лучший способ?Спасибо!

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Трудно действительно понять, что вам нужно, без более конкретного примера того, что вы делаете, но, как правило, это можно решить, передав представление объекта набора запросов, помещенное в генератор для отложенной обработки.

0 голосов
/ 18 ноября 2011

Нет ничего «неправильного» в том, чтобы повторять одно и то же итеративное дваждыИногда это может быть необходимо, и без примера кода невозможно определить, является ли он или нет.

Важно то, что на самом деле он не запрашивает базу данных дважды.Django кэширует наборы запросов, но способ взаимодействия с ним иногда может вызвать дополнительные запросы.Опять же, хотя, без примера кода, я не могу сказать, есть ли у вас проблемы с этим или нет.

ОБНОВЛЕНИЕ Нет ничего плохого в том, что вы сделали, если есть дополнительная обработканеобходимо для набора запросов, правильное место, чтобы сделать это в представлении.Циклы новой и улучшенной версии в шаблоне не являются проблемой, и база данных не подвергается избыточным запросам.Я говорю, перестань так сильно волноваться;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...