2016-05-20 62 views
1

我有TemplateView的家庭和一個網站的事件組織者的頁面。現在我想包括與接下來的三個事件的兩個模板中像這樣的列表模板:在django中包含泛型視圖 - 如何正確使用它?

{% 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中的主頁被解決,但不可能是正確的解決方案。

有人可以解釋一下,如何做到這樣一個正確的方式?

提前致謝!

回答

2

你已經列出了超類錯誤的方式; ListView中的一些方法比TemplateView中的方法更具體,但是因爲後者是首先列出的,所以方法會在那裏找到。

然而,似乎沒有任何需要從TemplateView繼承。 ListView已經做到了,並允許你設置template_name。只需從繼承中刪除TemplateView即可。

+0

謝謝你! – setchock