• 23 Июл
  • 2015
Редирект по условию в Class Based Views

Иногда случается ситуация, когда нужно отредиректить человека на другой URL, при определенных условиях, например, если ListView не получил из базы ни одного элемента. Решение достаточно простое и реализуется методом dispatch.

Клас вьюхи принимает такой вид:


from django.shortcuts import redirect


class CategoriesList(ListView):
    model = Category
    context_object_name = 'categories'
    template_name = 'categories.html'
    paginate_by = 50

    def get_queryset(self):
        # Getting queryset
        return qs

    def dispatch(self, request, *args, **kwargs):
        if not self.get_queryset():
            return redirect('products', kwargs['category'])
        else:
            return super(CategoriesList, self).dispatch(request, *args, **kwargs)

Теперь если get_queryset возвратит пустой список, то сработает метод dispatch и переадресует пользователя на нужный URL.

comments powered by Disqus