2014-02-24 36 views
0

當你寫一個擴展Django的視圖DetailView可以覆蓋各種方法,如get_queryset()get_object()get_context_data()python Django DetailView的方法的生命週期是什麼?

我在閱讀了「對象」屬性中get_context_data困難。具體而言,似乎存在,但 'object' 類:

def get_context_data(self, **kwargs): 
    context = super(SectionTextDetailView, self).get_context_data(**kwargs) 
    if object: 
     print (str(object)) 
     ## in reality try some logic with the object here 
    else: 
     print("very bad!") 
    return context 

(此打印 「」)

我懷疑get_object()get_context_data()之後叫什麼名字?真的嗎?

我的整體問題是 - View類中的方法的生命週期(評估順序)是什麼,特別是DetailView

我在Django文檔中查看了DetailViewSingleObjectMixin的參考條目,似乎沒有明確提及這一點。

回答

5

你沒有定義什麼叫object這裏。這個名字唯一的東西是內置的Python類型。

你或許應該使用self.object。看着the codeget_object立即打電話給get(),所以它應該立即可用。

+0

是的,我意識到我粘貼代碼後發生錯誤。 評估的順序是get_object(),然後是get_context_data()。與django文檔中看似隱含的內容相反,get_queryset()從來不會在DetailView中調用,因爲我們正在處理單個對象而不是alist。 – scot

+1

@scot'get_queryset()'* *將被調用,在['get_object'](https://github.com/django/django/blob/1.6/django/views/generic/detail.py#L21)方法。 – Alasdair

+0

可能沒有在我的堆棧中被調用,因爲我重寫get_object只使用objects.get(pk),然後不調用super() – scot

相關問題