Cla*_*ash 15 django django-generic-views
我经常看到自己必须在我的许多视图的上下文中添加相同的额外变量.
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(MyListView, self).get_context_data(**kwargs)
# Add in the house
context['house'] = self.get_object().house
return context
Run Code Online (Sandbox Code Playgroud)
因为我不喜欢重复自己,我想我可以创建一个扩展视图的新类,然后我可以将所有视图基于新的扩展视图类.问题是,我使用了4类视图:CreateView,UpdateView,ListView和DeleteView.我是否真的必须为其中一个创建一个新类?
是不是像django"基础"视图类?也许更聪明的方法呢?提前谢谢了!
Jj.*_*Jj. 21
创建一个Mixin:
from django.views.generic.base import ContextMixin
class HouseMixin(ContextMixin):
def get_house(self):
# Get the house somehow
return house
def get_context_data(self, **kwargs):
ctx = super(HouseMixin, self).get_context_data(**kwargs)
ctx['house'] = self.get_house()
return ctx
Run Code Online (Sandbox Code Playgroud)
然后在其他类中使用多重继承:
class HouseEditView(HouseMixin, UpdateView):
pass
class HouseListView(HouseMixin, ListView):
pass
Run Code Online (Sandbox Code Playgroud)
等等,那么所有这些观点都将house在上下文中出现.