在 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。
我有用于主页的 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。