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

让人想犯罪 __ 提交于 2019-12-08 03:32:45

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!