Django 未调用mixin中的获取上下文数据
我是Django的新手。我想使用mixin将一些数据返回到多个基于类的视图。看起来我在mixin中定义的Django 未调用mixin中的获取上下文数据,django,Django,我是Django的新手。我想使用mixin将一些数据返回到多个基于类的视图。看起来我在mixin中定义的get\u context\u data没有在view类中调用 class MyMixin(object): def get_context_data(self, *args, **kwargs): data = super(MyMixin, self).get_context_data(*args, **kwargs) from django.util
get\u context\u data
没有在view类中调用
class MyMixin(object):
def get_context_data(self, *args, **kwargs):
data = super(MyMixin, self).get_context_data(*args, **kwargs)
from django.utils import timezone
data['object'].now = timezone.now()
return data
class PageDetail(DetailView, MyMixin):
model = MyModel
template_name = 'page-detail.html'
def get_context_data(self, *args, **kwargs):
data = super(PageDetail, self).get_context_data(*args, **kwargs)
return data
按错误的顺序定义基类: 因此不调用任何
super()
方法
您应该将PageDetail
定义为:
class PageDetail(MyMixin, DetailView):
# ...
类页面详细信息(MyMixin,DetailView):
#…
因此,MRO的定义如下:
>>> PageDetail.__mro__
(<class 'PageDetail'>,
<class 'django.views.generic.detail.DetailView'>,
<class 'django.views.generic.detail.SingleObjectTemplateResponseMixin'>,
<class 'django.views.generic.base.TemplateResponseMixin'>,
<class 'django.views.generic.detail.BaseDetailView'>,
<class 'django.views.generic.detail.SingleObjectMixin'>,
<class 'django.views.generic.base.ContextMixin'>,
<class 'django.views.generic.base.View'>,
<class 'MyMixin'>,
<class 'object'>)
>>> PageDetail.__mro__
(<class 'PageDetail'>,
<class 'MyMixin'>,
<class 'django.views.generic.detail.DetailView'>,
<class 'django.views.generic.detail.SingleObjectTemplateResponseMixin'>,
<class 'django.views.generic.base.TemplateResponseMixin'>,
<class 'django.views.generic.detail.BaseDetailView'>,
<class 'django.views.generic.detail.SingleObjectMixin'>,
<class 'django.views.generic.base.ContextMixin'>,
<class 'django.views.generic.base.View'>,
<class 'object'>)
>>PageDetail.\uu mro__
(,
,
,
,
,
,
,
,
,
)
因此,
super(PageDetail,self).get_context_data(*args,**kwargs)
将调用MyMixin
类的get_context_data
,然后在MRO中调用下一个方法。您应该在DetailView
之前定义MyMixin
。
class PageDetail(MyMixin, DetailView):
# ...
>>> PageDetail.__mro__
(<class 'PageDetail'>,
<class 'MyMixin'>,
<class 'django.views.generic.detail.DetailView'>,
<class 'django.views.generic.detail.SingleObjectTemplateResponseMixin'>,
<class 'django.views.generic.base.TemplateResponseMixin'>,
<class 'django.views.generic.detail.BaseDetailView'>,
<class 'django.views.generic.detail.SingleObjectMixin'>,
<class 'django.views.generic.base.ContextMixin'>,
<class 'django.views.generic.base.View'>,
<class 'object'>)