2015-02-11 64 views
0

我有一個Django項目,其中註冊了幾個應用程序。他們每個人都呈現自己的模板,所有這些擴展了相同的基本模板。現在我想將數據傳遞給這個基本模板,而不需要所有的應用程序都這樣做。 (這將是相當的開銷)我認爲使用自定義模板標籤來做這件事,但我在這裏完全喪失了可能性和方法。任何提示或建議?Django將上下文從不同的應用程序傳遞到一個模板

+0

您使用CBV還是標準功能視圖? – sax 2015-02-11 19:26:26

+0

我使用基於功能的視圖 – Jouh 2015-02-11 19:38:27

+0

看到我的答案這是一個典型的CBV使用 – sax 2015-02-11 19:39:59

回答

1

創建一個混合並覆蓋get_context_data(),把那裏所有的共同的東西,這樣的mixin添加到您所有的觀點,即需要這種行爲

class CommonMixin(object): 
    def get_context_data(self, **kwargs): 
     context = super(CommonMixin, self).get_context_data(**kwargs) 
     context['common_value'] = 'VALUE1' 
     return context 


class App1View(CommonMixin, ListView): 
    ... 


class App2View(CommonMixin, CreateView): 
    ... 

如果使用功能視圖,寫了一個作爲get_context_data和功能在每個視圖中使用它。

您可以創建自定義標籤,但可能會導致更多的計算成本。

另一種方法是編寫自定義context processor但這會影響您的所有視圖。

+0

任何其他方式?向所有應用程序添加代碼正是我想要避免的。 – Jouh 2015-02-11 20:00:31

+0

補充說明,無論如何,我的建議是轉移到CBV – sax 2015-02-11 21:00:45

相關問題