2011-06-21 42 views
4

我需要爲其他數據顯示視頻的詳細信息頁面。 對於這個我使用DetailView,我已覆蓋添加一些變量的上下文。Django - 泛型視圖子類型 - 網址參數

下面是部分代碼:

#urlconf 
#... 
    (r'viewtube/(?P<pk>\d+)$', VideoFileDetailView.as_view()), 
#... 

#view 
class VideoFileDetailView(DetailView): 
    model = VideoFile 
    def get_context_data(self, **kwargs): 
    context = super(VideoFileDetailView, self).get_context_data(**kwargs) 
# context['rates'] = VideoRate.objects.filter(video=11, user=1) 
    return context 

這裏pk是視頻的ID,我需要用當前用戶獲取所選視頻的速率。

回答

3

這將是有用的顯示模型。但我認爲你需要覆蓋get()而不是get_context_data,遺憾的是後者沒有通過請求,你需要爲了獲得用戶。所以:

def get(self, request, **kwargs): 
    self.object = self.get_object() 
    context = self.get_context_data(object=self.object) 
    context['rates'] = VideoRate.objects.filter(video=self.object, user=request.user) 
    return self.render_to_response(context) 
+3

Aparently從'get_context_data()'我們可以得到請求trought'self.request',由於它的工作與 –

4

該請求應可訪問在self.requestself.request設置在請求的開頭(位於View.dispatch),並且應該可用於任何子類方法。

class VideoFileDetailView(DetailView): 
    model = VideoFile 
    def get_context_data(self, **kwargs): 
    context = super(VideoFileDetailView, self).get_context_data(**kwargs) 
    context['rates'] = VideoRate.objects.filter(video=11, self.request.user) 
    # note that the object is available via self.object or kwargs.get("object") 
    return context 
+0

我還需要在'VideoFile'本身篩選,所以用'視頻=自我。對象'我得到了我正在尋找的東西。 –

+0

謝謝Yuji。我還沒有用基於類的視圖進行過很多實驗,並且有點驚訝,request沒有明確地傳遞給get_context_data。 –

+0

嗯,你是對的!這比我習慣通過代碼時更神奇。那麼,這是全新的;) –