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方法
归档时间: |
|
查看次数: |
15572 次 |
最近记录: |