首页 文章

要成为基于类的视图还是泛型类基本视图?

提问于
浏览
1

所以下面我看了一个Django Con EU谈话视频后,我刚刚创建了第一个基于类的视图 .

它起作用并理解它的作用 . 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

3 回答

  • 2

    ListView 是一个基于类的通用视图(这意味着,它随Django一起提供,它实现了非常常见的功能,可以像以前那样继承自己进行更精确的处理) . 另一方面, GroupListView 不是通用的 - 因为它不是Django的一部分 .

  • 3

    Django附带了一组试图解决一些常见问题的视图,例如:

    • 编辑对象

    • 显示单个对象

    • 显示对象列表

    由于这些视图可用于不同的模型,因此它们被称为 generic . "Generic"在这种情况下与它们的实现方式没有任何关系 - 在较旧的Django版本中,函数视图是默认的(视图是函数),现在它们已成为类 .

    您的示例视图实际上是一个基于类的视图,它继承自基于类的通用视图 .

  • 1

    Class based view是作为Python类提供的任何Django视图(与作为函数的视图相对) .

    Django中的Generic base View是任何内置视图的基础,您可以使用它们以方便使用 . 例子:

    • ListView

    • CreateView

    • DetailView

    这些是基于django.views.generic.base.View .

相关问题