使用Generic ListView进行动态分页

时间:2013-02-05 20:26:13

标签: django

我要求用户应该能够在助理列表中选择他想要在每页中查看的项目数。我在Django 1.4中使用通用的ListView。

此更改之前的代码如下所示:

Class AssistantList(ListView):
    template_name = "register/assistant_list.html"
    context_object_name = 'assistant_list'
    paginate_by = 25

如何根据用户的选择动态设置paginate_by,而不是像上面那样对其进行硬编码?

1 个答案:

答案 0 :(得分:16)

我最近不得不这样做。您可以覆盖get_paginate_by函数以获取查询字符串参数。这是一个基本的例子。

Class AssistantList(ListView):
    template_name = "register/assistant_list.html"
    context_object_name = 'assistant_list'
    paginate_by = 25

    def get_paginate_by(self, queryset):
        """
        Paginate by specified value in querystring, or use default class property value.
        """
        return self.request.GET.get('paginate_by', self.paginate_by)

然后在我们的html中,我们有一个下拉选项,用户可以选择要查看的项目数。

<form action="." method="get">
    <select name="paginate_by">
        <option>25</option>
        <option>50</option>
        <option>75</option>
        <option>100</option>
    </select>
</form>

我们添加了一些javascript以使其自动提交,您需要将paginate_by传递给上下文,这样您就可以确保它继续从一个页面传递到另一个页面。