自定義通用檢視

上述示例僅在你的任務完全是標準任務時才有效。例如,你不會在此處新增額外的上下文。

讓我們做一個更現實的例子。假設我們要向模板新增頁面標題。在功能檢視中,這可以像這樣工作 - 只需一行:

def create_object(request):
    page_title = 'My Page Title'

    # ...

    return render_to_response('template.html', locals())

使用通用檢視實現這一點會更困難(或者是反向插值)。由於它們是基於類的,因此你需要覆蓋一個或多個類的方法以實現所需的結果。在我們的示例中,我們需要覆蓋類的 get_context_data 方法,如下所示:

class CreateObject(CreateView):
    model = SampleObject
    form_class = SampleObjectForm
    success_url = 'url_to_redirect_to'

    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

在這裡,我們需要四行程式碼而不是一行 - 至少對於我們想要新增的第一個附加上下文變數。