4

我需要显示包含其他数据的视频的详细信息页面。为此,我使用DetailView已覆盖的内容将一些变量添加到上下文中。

以下是代码部分:

#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,我需要获取当前用户所选视频的费率。

4

2 回答 2

4

该请求应可在 访问self.requestself.request在请求的开头(in 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
于 2011-06-21T16:47:09.423 回答
3

展示模型会很有用。但我认为您需要覆盖get(), not 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)
于 2011-06-21T15:18:37.710 回答