2016-05-20 22 views
1

Ich habe TemplateViews für das Haus und über Seiten einer Website für einen Veranstalter. Jetzt möchte ich mit einer Liste der nächsten drei Ereignisse in beiden Vorlagen wie diese eine Vorlage enthalten:Einbeziehung von generischen Ansichten in Django - wie man es richtig macht?

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

Da diese Vorlage sollte in beiden Seiten enthalten sein, dachte ich über ein Listview nur für die nächsten Ereignisse zu schreiben und einschließlich es in meinem Haus und über Ansichten.

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" 

Aber ich habe nicht vollständig verstanden, wie die generische Ansicht ListView seine object_list bekommen. Wenn ich so umfassen, bekomme ich folgende Fehlermeldung:

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

, die durch aufgelöst werden kann Object_List zum HomePageView Zugabe, aber das kann nicht die richtige Lösung sein.

Kann jemand erklären, wie man eine solche Aufnahme richtig macht?

Vielen Dank im Voraus!

Antwort

2

Sie haben die Superklassen falsch herum aufgelistet; Einige der Methoden in ListView sind spezifischer als die in TemplateView, aber da letzterer zuerst aufgelistet wird, werden die Methoden stattdessen dort gefunden.

Allerdings scheint es keine Notwendigkeit zu geben, von TemplateView zu erben. ListView tut dies bereits und erlaubt es Ihnen, einen template_name trotzdem festzulegen. Lassen Sie die TemplateView einfach aus der Vererbung fallen.

+0

danke dafür! – setchock