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

這樣做的好處在於,你的程式碼變得更加結構化,而不是功能檢視。你在特定任務背後的整個邏輯只在一個地方和一個地方。此外,你將節省大量時間,尤其是當你有許多檢視始終執行相同的任務時,除了使用不同的物件