Как перенаправить на условия с представлениями на основе классов в Django 1.3? - PullRequest
28 голосов
/ 25 марта 2011

Я использую ListView, который перечисляет видео в соответствии с тегами. Фильтрация происходит в get_queryset (). Я бы хотел перенаправить пользователя на другую страницу, если тег не содержит видео.

С функцией это было бы легко. Запрос, проверить набор запросов, перенаправить. С классом мне не удается это сделать:

class VideosView(generic.ListView):

    def get_queryset(self):
        """
            This work.
        """

        tag = self.kwargs.get('tag', None)

        self.videos = Video.on_site.all()

        if tag:
            self.videos = Video.tagged.with_all(tag, self.videos)

        return self.videos

    def get(self, request, *args, **kwargs):
        """
        This doesn't work because self.videos doesn't exist yet.
        """
        if not self.videos:
            return redirect('other_page')

        return super(Videos, self).get(request, *args, **kwargs)

Ответы [ 3 ]

28 голосов
/ 18 августа 2012

Я знаю, что это старо, но я действительно согласен с Томмазо.Метод dispatch () обрабатывает запрос и возвращает HTTP-ответ.Если вы хотите настроить отклик представления, это место, где это нужно сделать.Вот документы по отправке ().

class VideosView(ListView):
    # use model manager
    queryset = Videos.on_site.all()

    def dispatch(self, request, *args, **kwargs):
        # check if there is some video onsite
        if not queryset:
            return redirect('other_page')
        else:
            return super(VideosView, self).dispatch(request, *args, **kwargs)

    # other method overrides here
10 голосов
/ 25 марта 2011

Нашли:

def render_to_response(self, context):

    if not self.videos:
        return redirect('other_page')

    return super(VideosView, self).render_to_response(context)

Это вызывается для всех методов HTTP

0 голосов
/ 03 февраля 2013

Согласно Джанго Док :

в url.py

from django.views.generic.base import RedirectView

urlpatterns = patterns('',
     ...
    url(r'^go-to-django/$', RedirectView.as_view(url='http://djangoproject.com'), name='go-to-django'),
..
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...