在 Django 中包含通用视图 - 如何以正确的方式进行?

Inclusion of generic views in django - how to do it the right way?

我有用于主页的 TemplateView 和用于活动组织者的网站页面。现在我想在两个模板中包含一个模板,其中包含接下来三个事件的列表,如下所示:

{% include "next-events.html"%}

由于这个模板应该包含在两个页面中,所以我考虑只为接下来的事件编写一个 ListView 并将其包含在我的主页和视图中。

class NextEventsView(ListView):
    """ a preview of the next events """
    queryset = Event.objects.filter(date__gte=datetime.date.today()).order_by('date')[:3]
    context_object_name = 'next_events'

class HomePageView(TemplateView, NextEventsView):
    template_name = "home/home.html"

class AboutPageView(TemplateView, NextEventsView):
    template_name = "home/about.html"

但我还没有完全理解 ListView 通用视图是如何获取它的 object_list。如果我这样包含,我会收到以下错误:

AttributeError: 'HomePageView' object has no attribute 'object_list'

可以通过将 object_list 添加到 HomePageView 来解决,但这不是正确的解决方案。

任何人都可以解释一下,如何以正确的方式进行这样的包含?

提前致谢!

你把超类列错了方向; ListView 中的一些方法比 TemplateView 中的方法更具体,但是因为后者列在前面,所以会在那里找到方法。

不过好像完全没有继承TemplateView的必要。 ListView 已经这样做了,并且允许您设置 template_name 无论如何。只需从继承中删除 TemplateView。