2016-03-22 5 views
0

Я сделаю все возможное, чтобы это объяснить. У меня есть следующий цикл в моем шаблоне:Итерация по модели Django - сегмент по дате

{% for traffic in traffic %} 
    <tr> 
    <td>{{ traffic.created | date:"Y" }}</td> 
    <td>{{ traffic.created | date:"SHORT_DATE_FORMAT" }}</td> 
    <td>{{ traffic.sessions | default_if_none:"" }}</td> 
    <td>{{ traffic.new_users | default_if_none:"" }}</td> 
    <td>{{ traffic.created | date:"F" }}</td> 
    <td>{{ traffic.created | get_quarter }}</td>{# Custom Filter #} 
    <td>{{ traffic.created | date:"l" }}</td> 
    <td>{{ traffic.reminder | default_if_none:"" }}</td> 
    <td>{{ traffic.campaigns | default_if_none:"" }}</td> 
    <td>{{ traffic.new_sales | default_if_none:"" }}</td> 
    <td>{{ traffic.sales_renewals | default_if_none:"" }}</td> 
    </tr> 
{% endfor %} 

Выше показано все; который в этом случае является данными, который восходит к январю 2014 года. Что мне теперь нужно сделать, так это создать таблицу, в которой отображаются только данные за январь, а затем февраль, март и т. д. ... Я могу вручную создать эти таблицы, но имея такой повторяющийся код в моем шаблоне, кажется смешным. Есть ли способ создать цикл, который будет создавать отдельные таблицы на основе месяца в качестве уникального идентификатора? Таким образом, я могу создать один стол из храма и выложить на 12 месяцев. У меня есть другие таблицы данных, которые мне нужно создать таким же образом, поэтому найти решение имеет решающее значение для моего здравомыслия. Спасибо за помощь.

ответ

1

Существует regroup но все равно будет уничтожить ваше время загрузки страницы, как больше трафика прибывает (ирония?)

Что бы лучше было бы реализовать разбиение на страницы в вашу точке зрения, а затем order_by независимо от даты, что вы хотите, вы могли бы приступить к размышлению о функциях поиска по мере необходимости. Чтобы сделать это проще, у django есть ListView, у которого есть поддержка для разбиения на страницы, чтобы не было кода для написания

Как очень быстрый пример, это в значительной степени весь код списка, который вы бы нужный

class MyListView(ListView): 
    model = Traffic 
    paginate_by = 25 
    template_name = 'foo.html' 

    def get_queryset(self): 
     return self.model.objects.order_by('created') 



{% for traffic in object_list %} 
{% endfor %} 
+0

Я не уверен, что ирония - лучшее слово, чтобы описать трафик воздействия на количество времени, которое что-то берет, если у кого-то есть лучший дескриптор, пожалуйста, дайте мне знать! – Sayse

+1

не знаю, почему я так не думал об этом ... мой мозг мог быть маленьким DRYer. Спасибо. –

Смежные вопросы