10

我有一个要求,用户应该能够选择他想在助手列表中看到的每页有多少项目。我在 Django 1.4 中使用通用 ListView。

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

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

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

4

1 回答 1

19

我最近不得不这样做。您可以覆盖 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 传递给上下文,以便确保它继续在页面之间传递。

于 2013-02-06T02:13:27.470 回答