Это старый вопрос, но я считаю, что ответ неверный. В вашем коде есть ошибка. Следует читать:
class MyListView(ListSortedMixin, ListPaginatedMixin, ListView):
def get_context_data(self, **context):
super(MyListView,self).get_context_data(**context)
return context
Порядок, в котором будет вызываться get_context_data
, следует тому же порядку, который указан в объявлении MyListView
. Обратите внимание, что аргумент супер - MyListView
, а не суперклассы.
UPDATE
Я пропустил, что ваши миксины не называют супер. Им следует. Да, даже если они наследуют от объекта, потому что super вызывает следующий метод в MRO, а не обязательно родительский класс, в котором он находится.
from django.views.generic import ListView
class ListSortedMixin(object):
def get_context_data(self, **kwargs):
print 'ListSortedMixin'
return super(ListSortedMixin,self).get_context_data(**context)
class ListPaginatedMixin(object):
def get_context_data(self, **kwargs):
print 'ListPaginatedMixin'
return super(ListPaginatedMixin,self).get_context_data(**context)
class MyListView(ListSortedMixin, ListPaginatedMixin, ListView):
def get_context_data(self, **context):
return super(MyListView,self).get_context_data(**context)
Для MyListView
тогда MRO равно:
- MyListView
- ListSortedMixin
- ListPaginatedMixin
- ListView
- Что бы ни было выше ListView
...
п. объект
Называть их по одному может сработать, но это не то, как предполагалось.
ОБНОВЛЕНИЕ 2
Скопируйте и вставьте пример, чтобы доказать мою точку зрения.
class Parent(object):
def get_context_data(self, **kwargs):
print 'Parent'
class ListSortedMixin(object):
def get_context_data(self, **kwargs):
print 'ListSortedMixin'
return super(ListSortedMixin,self).get_context_data(**kwargs)
class ListPaginatedMixin(object):
def get_context_data(self, **kwargs):
print 'ListPaginatedMixin'
return super(ListPaginatedMixin,self).get_context_data(**kwargs)
class MyListView(ListSortedMixin, ListPaginatedMixin, Parent):
def get_context_data(self, **kwargs):
return super(MyListView,self).get_context_data(**kwargs)
m = MyListView()
m.get_context_data(l='l')