mixins-multiple-object.txt 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. ======================
  2. Multiple object mixins
  3. ======================
  4. MultipleObjectMixin
  5. -------------------
  6. .. class:: django.views.generic.list.MultipleObjectMixin
  7. A mixin that can be used to display a list of objects.
  8. If ``paginate_by`` is specified, Django will paginate the results returned
  9. by this. You can specify the page number in the URL in one of two ways:
  10. * Use the ``page`` parameter in the URLconf. For example, this is what
  11. your URLconf might look like::
  12. (r'^objects/page(?P<page>[0-9]+)/$', PaginatedView.as_view())
  13. * Pass the page number via the ``page`` query-string parameter. For
  14. example, a URL would look like this::
  15. /objects/?page=3
  16. These values and lists are 1-based, not 0-based, so the first page would be
  17. represented as page ``1``.
  18. For more on pagination, read the :doc:`pagination documentation
  19. </topics/pagination>`.
  20. As a special case, you are also permitted to use ``last`` as a value for
  21. ``page``::
  22. /objects/?page=last
  23. This allows you to access the final page of results without first having to
  24. determine how many pages there are.
  25. Note that ``page`` *must* be either a valid page number or the value
  26. ``last``; any other value for ``page`` will result in a 404 error.
  27. **Extends**
  28. * :class:`django.views.generic.base.ContextMixin`
  29. **Methods and Attributes**
  30. .. attribute:: allow_empty
  31. A boolean specifying whether to display the page if no objects are
  32. available. If this is ``False`` and no objects are available, the view
  33. will raise a 404 instead of displaying an empty page. By default, this
  34. is ``True``.
  35. .. attribute:: model
  36. The model that this view will display data for. Specifying ``model
  37. = Foo`` is effectively the same as specifying ``queryset =
  38. Foo.objects.all()``.
  39. .. attribute:: queryset
  40. A ``QuerySet`` that represents the objects. If provided, the value of
  41. ``queryset`` supersedes the value provided for :attr:`model`.
  42. .. warning::
  43. ``queryset`` is a class attribute with a *mutable* value so care
  44. must be taken when using it directly. Before using it, either call
  45. its :meth:`~django.db.models.query.QuerySet.all` method or
  46. retrieve it with :meth:`get_queryset` which takes care of the
  47. cloning behind the scenes.
  48. .. attribute:: paginate_by
  49. An integer specifying how many objects should be displayed per page. If
  50. this is given, the view will paginate objects with
  51. ``paginate_by`` objects per page. The view will
  52. expect either a ``page`` query string parameter (via ``request.GET``)
  53. or a ``page`` variable specified in the URLconf.
  54. .. attribute:: paginate_orphans
  55. .. versionadded:: 1.6
  56. An integer specifying the number of "overflow" objects the last page
  57. can contain. This extends the :attr:`paginate_by` limit on the last
  58. page by up to ``paginate_orphans``, in order to keep the last page from
  59. having a very small number of objects.
  60. .. attribute:: page_kwarg
  61. .. versionadded:: 1.5
  62. A string specifying the name to use for the page parameter.
  63. The view will expect this prameter to be available either as a query
  64. string parameter (via ``request.GET``) or as a kwarg variable specified
  65. in the URLconf. Defaults to ``page``.
  66. .. attribute:: paginator_class
  67. The paginator class to be used for pagination. By default,
  68. :class:`django.core.paginator.Paginator` is used. If the custom paginator
  69. class doesn't have the same constructor interface as
  70. :class:`django.core.paginator.Paginator`, you will also need to
  71. provide an implementation for :meth:`get_paginator`.
  72. .. attribute:: context_object_name
  73. Designates the name of the variable to use in the context.
  74. .. method:: get_queryset()
  75. Get the list of items for this view. This must be an iterable and may
  76. be a queryset (in which queryset-specific behavior will be enabled).
  77. .. method:: paginate_queryset(queryset, page_size)
  78. Returns a 4-tuple containing (``paginator``, ``page``, ``object_list``,
  79. ``is_paginated``).
  80. Constructed by paginating ``queryset`` into pages of size ``page_size``.
  81. If the request contains a ``page`` argument, either as a captured URL
  82. argument or as a GET argument, ``object_list`` will correspond to the
  83. objects from that page.
  84. .. method:: get_paginate_by(queryset)
  85. Returns the number of items to paginate by, or ``None`` for no
  86. pagination. By default this simply returns the value of
  87. :attr:`paginate_by`.
  88. .. method:: get_paginator(queryset, per_page, orphans=0, allow_empty_first_page=True)
  89. Returns an instance of the paginator to use for this view. By default,
  90. instantiates an instance of :attr:`paginator_class`.
  91. .. method:: get_paginate_orphans()
  92. .. versionadded:: 1.6
  93. An integer specifying the number of "overflow" objects the last page
  94. can contain. By default this simply returns the value of
  95. :attr:`paginate_orphans`.
  96. .. method:: get_allow_empty()
  97. Return a boolean specifying whether to display the page if no objects
  98. are available. If this method returns ``False`` and no objects are
  99. available, the view will raise a 404 instead of displaying an empty
  100. page. By default, this is ``True``.
  101. .. method:: get_context_object_name(object_list)
  102. Return the context variable name that will be used to contain
  103. the list of data that this view is manipulating. If
  104. ``object_list`` is a queryset of Django objects and
  105. :attr:`context_object_name` is not set,
  106. the context name will be the ``object_name`` of the model that
  107. the queryset is composed from, with postfix ``'_list'``
  108. appended. For example, the model ``Article`` would have a
  109. context object named ``article_list``.
  110. .. method:: get_context_data(**kwargs)
  111. Returns context data for displaying the list of objects.
  112. **Context**
  113. * ``object_list``: The list of objects that this view is displaying. If
  114. ``context_object_name`` is specified, that variable will also be set
  115. in the context, with the same value as ``object_list``.
  116. * ``is_paginated``: A boolean representing whether the results are
  117. paginated. Specifically, this is set to ``False`` if no page size has
  118. been specified, or if the available objects do not span multiple
  119. pages.
  120. * ``paginator``: An instance of
  121. :class:`django.core.paginator.Paginator`. If the page is not
  122. paginated, this context variable will be ``None``.
  123. * ``page_obj``: An instance of
  124. :class:`django.core.paginator.Page`. If the page is not paginated,
  125. this context variable will be ``None``.
  126. MultipleObjectTemplateResponseMixin
  127. -----------------------------------
  128. .. class:: django.views.generic.list.MultipleObjectTemplateResponseMixin
  129. A mixin class that performs template-based response rendering for views
  130. that operate upon a list of object instances. Requires that the view it is
  131. mixed with provides ``self.object_list``, the list of object instances that
  132. the view is operating on. ``self.object_list`` may be, but is not required
  133. to be, a :class:`~django.db.models.query.QuerySet`.
  134. **Extends**
  135. * :class:`~django.views.generic.base.TemplateResponseMixin`
  136. **Methods and Attributes**
  137. .. attribute:: template_name_suffix
  138. The suffix to append to the auto-generated candidate template name.
  139. Default suffix is ``_list``.
  140. .. method:: get_template_names()
  141. Returns a list of candidate template names. Returns the following list:
  142. * the value of ``template_name`` on the view (if provided)
  143. * ``<app_label>/<object_name><template_name_suffix>.html``