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