Comment faire pour rediriger sur les conditions de la classe vues dans Django 1.3?
Je suis l'aide d'une ListView avec la liste des vidéos en fonction de balises. Le filtrage se passe dans get_queryset(). J'aimerais rediriger l'utilisateur vers une autre page si la balise ne contient aucune vidéo.
Avec une fonction, il serait facile. Requête, vérifiez le queryset, redirection. Avec une classe, je n'ai pas à le faire:
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)
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est vieux, mais je suis en fait d'accord avec Tommaso. La méthode dispatch() est ce que traite la demande et renvoie la réponse HTTP. Si vous souhaitez ajuster la réponse de la vue, c'est l'endroit pour le faire. Voici les docs sur dispatch().
self.get_queryset()
puis exécutez une condition qui.render_to_response
ne pouvait pas être un meilleur endroit pour cela. Théoriquement,dispatch
gère les redirections mais quand tous les calculs doivent être faits avant de rediriger,render_to_response
est le lieu.Trouvé:
Ce qui est demandé pour toutes les méthodes HTTP
Selon django doc :
dans url.py