首页 > 解决方案 > 如何在 LISTVIEW 中添加额外的上下文数据而不破坏内置分页

问题描述

关于分页问题的问题:

为什么如果我有例如以下 LISTVIEW:


class BoatListView(ListView):
    model = BoatModel
    template_name = "boats.html"
    paginate_by = 5

    def get_context_data(self, *, object_list=None, **kwargs):
        context = ListView.get_context_data(self, object_list=None, **kwargs)
        context["boats"] = BoatModel.objects.all()
        context["images"] = BoatImage.objects.all()
        return context

我会在模板中使用“boats”和“images”上下文,例如:


{% for boat in boats %}
some code here
{% endfor %}
...
…
….
{% bootstrap_pagination page_obj    %}

在这种情况下,分页器根本不起作用(引导一个或原始 Django https://docs.djangoproject.com/en/2.2/topics/pagination/#using-paginator-in-a-view),没有区别吗?

但是一旦我将“boats”和“images”更改为“object_list” - paginator 就会开始分页。

有什么问题,在这种情况下,如果我确实需要在使用 paiginator 的能力范围内添加额外的上下文,我该如何添加?

谢谢!

标签: djangodjango-viewsdjango-pagination

解决方案


ListView声明一个属性object_list,该属性从get_queryset(). 构造时context,此属性用于定义分页。您可以通过更改作为查询集发送的内容来覆盖分页get_context_data本身的行为self.paginate_queryset(queryset, page_size)(尽管我看不到这样做的理由)。

看看 ListView 是如何工作


推荐阅读