Mixins 的通用视图
当你将它们与 Mixins 结合使用时,通用视图的真正力量就展开了。mixin 是你定义的另一个类,其方法可以由你的视图类继承。
假设你希望每个视图在模板中显示其他变量“page_title”。每次定义视图时,不是覆盖 get_context_data 方法,而是使用此方法创建 mixin,并让你的视图继承此 mixin。听起来比实际更复杂:
# Your Mixin
class CustomMixin(object):
def get_context_data(self, **kwargs):
# Call class's get_context_data method to retrieve context
context = super().get_context_data(**kwargs)
context['page_title'] = 'My page title'
return context
# Your view function now inherits from the Mixin
class CreateObject(CustomMixin, CreateView):
model = SampleObject
form_class = SampleObjectForm
success_url = 'url_to_redirect_to'
# As all other view functions which need these methods
class EditObject(CustomMixin, EditView):
model = SampleObject
# ...
这样做的好处在于,你的代码变得更加结构化,而不是功能视图。你在特定任务背后的整个逻辑只在一个地方和一个地方。此外,你将节省大量时间,尤其是当你有许多视图始终执行相同的任务时,除了使用不同的对象