迭代Django模型 - 按日期分段

时间:2016-03-22 07:27:58

标签: django django-models django-templates django-views

我会尽力解释这一点。我的模板中有以下循环:

{% 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年1月。我现在需要做的是创建一个只显示1月份数据的表,然后是2月,3月等数据...我可以手动创建这些表但是在我的模板中有那么多重复的代码似乎很荒谬。有没有办法创建一个循环,将基于月份创建单个表作为唯一标识符?通过这种方式,我可以制作一个太阳穴桌,并且可以创造12个月的价值。我有其他数据表我需要以同样的方式创建,因此找到解决方案对我的理智至关重要。谢谢你的帮助。

1 个答案:

答案 0 :(得分: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 %}