我有家庭的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来解决这个问题,但这不是正确的解决方案。
任何人都能解释一下,如何以正确的方式进行这样的包容?
提前致谢!
答案 0 :(得分:2)
你已经以错误的方式列出了超类; ListView中的一些方法比TemplateView中的方法更具体,但由于后者首先列出,因此将在那里找到方法。
然而,似乎根本不需要从TemplateView继承。 ListView已经完成,并允许您设置template_name。只需从继承中删除TemplateView。