2

編寫基於類的視圖的最佳方式是什麼,它們都顯示基於日期的對象和表單?用例是一個站點索引頁面視圖,它既顯示當前的對象又有一個聯繫表單。什麼是寫一個基於類的基於視圖的django的好方法,它既顯示基於日期的對象又顯示一個表單?

起初我想到使用TodayArchiveView和ContactFormView作爲我的網站索引頁面視圖的mixin。但是,TodayArchiveView繼承自BaseDateListView,ContactFormView繼承自ProcessFormView。 ProcessFormView和BaseDateListView實現get()並最終調用render_to_response具有不同的數據,所以我認爲這將不起作用,因爲即使我可以通過超級調用這兩個都會返回? (我甚至不確定我對此的看法是否正確;我仍然圍繞着多重繼承進行包裝)。

然後我想寫我自己的get(),它結合了兩個get的功能,因爲他們的功能不會相互衝突,據我所知。所以最後看起來像這樣:

def get(self, request, *args, **kwargs): 
    form_class = self.get_form_class() 
    form = self.get_form(form_class) 

    self.date_list, self.object_list, extra_context = self.get_dated_items() 
    context = self.get_context_data(form=form, object_list=self.object_list, 
     date_list=self.date_list) 
    context.update(extra_context) 
    return self.render_to_response(context) 

這是正確的做法嗎?

作爲一個更大的問題,你怎麼知道哪些mixin可以相互使用?我不得不去django源代碼來認識到兩個類都在實現get()。

+0

在實驗上,我已證實此方法有效。仍然想知道在概念上它是否正確。 – sandinmyjoints 2012-02-09 03:35:20

回答

2

您的表單是否與對象相關?從描述來看,它似乎不是,我猜你的聯繫表單是在某種側欄或類似的網站範圍內(或至少是部分範圍)的元素。

如果這是正確的,我不會在視圖中包含表單;相反,我會使用標記或包含或類似的方法來放置一個單獨定義的模板。

+0

你說得對,它不是內在的索引視圖,而是邊欄的一部分。包含標籤很有意義。 – sandinmyjoints 2012-02-13 12:53:40

相關問題