Django - общий вид в подклассах - параметры URL - PullRequest
4 голосов
/ 21 июня 2011

Мне нужно отобразить страницу подробностей для видео с некоторыми другими данными. Для этого я использую 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 - это идентификатор видео, мне нужно получить оценку выбранного видео текущим пользователем.

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Запрос должен быть доступен на 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
3 голосов
/ 21 июня 2011

Было бы полезно показать модели. Но я думаю, что вам нужно переопределить 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...