如何在Django CBV ListView中具有多个列表?

Jos*_*eph 1 django django-class-based-views

在我的应用中,我希望有一个索引页面,该页面将显示两个对象列表,其中两个列表都包含相同类型的对象(即,相同的Model)。

在传统的基于函数的视图中,这很容易:我定义了两个变量,将它们分配给查询集,然后将它们传递到模板的上下文中,在这里我可以轻松地按名称访问它们。

我还是CBV的新手,似乎有很多魔术,很多东西都是自动处理的。我了解如何覆盖ListView的查询集(默认情况下给定Model的所有对象),但是我没有得到的是如何提供多个查询集,这样我的ListView实际上可以显示两个列表。

到目前为止,我唯一的想法是将self.object_list覆盖为两个查询集的元组,但这似乎会使我的模板代码不太清晰,甚至不确定它是否可以工作。

ign*_*aga 5

如果您不希望在多列表视图中支持分页,建议您覆盖视图类的get_context_data和get方法。

def get_context_data(self, **kwargs):
    """
    Get the context for this view.
    """
    queryset = kwargs.pop('object_list', self.object_list)
    queryset2 = kwargs.pop('object_list', self.object_list2)

    context = {
        'paginator': None,
        'page_obj': None,
        'is_paginated': False,
        'object_list': queryset,
        'object_list3': queryset2
    }

    context.update(kwargs)

    return context

def get(self, request, *args, **kwargs):
    self.object_list1 = self.get_queryset1()
    self.object_list2 = self.get_queryset2()

    context = self.get_context_data()
    return self.render_to_response(context)
Run Code Online (Sandbox Code Playgroud)

对不起,名称(1和2),但是每当我放置“ get_queryset1”之类的名称时,都应添加更具描述性的名称