Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

To be a Class based view or a generic class base view?

So below I have just created by first Class based view after watching a Django Con EU talk video.

It works and understand what it does. I don't understand the difference between a Class based view or a generic class base view - which I have just build?

class GroupListView(ListView):
    """
    List all Groups.
    """
    context_object_name = 'groups'
    template_name = 'contacts/home.html'

    def get_context_data(self, **kwargs):
        """
        Get the context for this view.
        """
        # Call the base implementation first to get a context.
        context = super(GroupListView, self).get_context_data(**kwargs)
        # Add more contexts.
        context['tasks'] = Upload.objects.filter(uploaded_by=self.request.user).order_by('-date_uploaded')[:5]
        context['unsorted'] = Contact.objects.unsorted_contacts(user=self.request.user).count()

        return context

    def get_queryset(self):
        """
        Get the list of items for this view. This must be an iterable, and may
        be a queryset (in which qs-specific behavior will be enabled).
        """
        queryset = Group.objects.for_user(self.request.user)
        return queryset 
like image 752
GrantU Avatar asked Dec 14 '25 23:12

GrantU


2 Answers

Django comes with a set of views that are trying to solve some common problems, eg:

  • Editing an object
  • Displaying a single object
  • Displaying a list of objects

Because these views can be used for different models, they are called generic. "Generic" in this case hasn't anything to do with the way they are implemented - in older Django version function views were the default (the views were functions), now they have became classes.

Your example view is actually a class-based view that inherits from a class-based generic view.

like image 134
Bernhard Vallant Avatar answered Dec 16 '25 21:12

Bernhard Vallant


A Class based view is any Django view provided as a Python Class (as opposed to views as functions).

A Generic base View in Django is the base for any of the built-in views which you can use for your convenience. Examples:

  • ListView
  • CreateView
  • DetailView

Those are based on django.views.generic.base.View.

like image 29
gertvdijk Avatar answered Dec 16 '25 22:12

gertvdijk



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!