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
    # ...

这样做的好处在于,你的代码变得更加结构化,而不是功能视图。你在特定任务背后的整个逻辑只在一个地方和一个地方。此外,你将节省大量时间,尤其是当你有许多视图始终执行相同的任务时,除了使用不同的对象