Django - 通用视图Subclassed - url参数

时间:2011-06-21 14:31:26

标签: django subclass django-generic-views

我需要显示包含其他数据的视频的详细信息页面。 为此我使用了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,我需要获取当前用户所选视频的费率。

2 个答案:

答案 0 :(得分:4)

请求可在self.request访问。 self.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

答案 1 :(得分: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)