如何在Django 1.3中使用基于类的视图重定向条件?

e-s*_*tis 28 django redirect class-based-views

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

小智 28

我知道这是旧的,但我实际上同意Tommaso.dispatch()方法处理请求并返回HTTP响应.如果你想调整视图的响应,那就是这样做的地方.以下是dispatch()的文档.

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
Run Code Online (Sandbox Code Playgroud)


e-s*_*tis 10

找到了:

def render_to_response(self, context):

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

    return super(VideosView, self).render_to_response(context)
Run Code Online (Sandbox Code Playgroud)

这适用于所有HTTP方法