问题
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
回答1:
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.
回答2:
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.
回答3:
ListView
is a generic class-based view (which means, it comes with Django, implements very common features, and is free to be inherited from for more precise handling as you did). On the other hand, GroupListView
is not generic - as it is not part of Django.
来源:https://stackoverflow.com/questions/17191970/to-be-a-class-based-view-or-a-generic-class-base-view