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