with parametros generic from context con based django redirect class-based-views

generic - redirect con parametros django



¿Cómo redirigir en condiciones con vistas basadas en clase en Django 1.3? (3)

Estoy usando un ListView que enumera videos según las etiquetas. El filtrado ocurre en get_queryset (). Me gustaría redirigir al usuario a otra página si la etiqueta no contiene ningún video.

Con una función, sería fácil. Consulta, verifica el conjunto de preguntas, redirige. Con una clase, no lo hago:

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)


De acuerdo con django doc :

en 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''), .. )


Lo encontré:

def render_to_response(self, context): if not self.videos: return redirect(''other_page'') return super(VideosView, self).render_to_response(context)

Esto se llama para todos los métodos HTTP


Sé que esto es viejo, pero estoy de acuerdo con Tommaso. El método dispatch () es el que maneja la solicitud y devuelve la respuesta HTTP. Si desea ajustar la respuesta de la vista, ese es el lugar para hacerlo. Aquí están los docs en 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