generic-display.txt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. =====================
  2. Generic display views
  3. =====================
  4. The two following generic class-based views are designed to display data. On
  5. many projects they are typically the most commonly used views.
  6. ``DetailView``
  7. ==============
  8. .. class:: django.views.generic.detail.DetailView
  9. While this view is executing, ``self.object`` will contain the object that
  10. the view is operating upon.
  11. **Ancestors (MRO)**
  12. This view inherits methods and attributes from the following views:
  13. * :class:`django.views.generic.detail.SingleObjectTemplateResponseMixin`
  14. * :class:`django.views.generic.base.TemplateResponseMixin`
  15. * ``django.views.generic.detail.BaseDetailView``
  16. * :class:`django.views.generic.detail.SingleObjectMixin`
  17. * :class:`django.views.generic.base.View`
  18. **Method Flowchart**
  19. 1. :meth:`~django.views.generic.base.View.dispatch()`
  20. 2. :meth:`~django.views.generic.base.View.http_method_not_allowed()`
  21. 3. :meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names()`
  22. 4. :meth:`~django.views.generic.detail.SingleObjectMixin.get_slug_field()`
  23. 5. :meth:`~django.views.generic.detail.SingleObjectMixin.get_queryset()`
  24. 6. :meth:`~django.views.generic.detail.SingleObjectMixin.get_object()`
  25. 7. :meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name()`
  26. 8. :meth:`~django.views.generic.detail.SingleObjectMixin.get_context_data()`
  27. 9. ``get()``
  28. 10. :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response()`
  29. **Example myapp/views.py**::
  30. from django.views.generic.detail import DetailView
  31. from django.utils import timezone
  32. from articles.models import Article
  33. class ArticleDetailView(DetailView):
  34. model = Article
  35. def get_context_data(self, **kwargs):
  36. context = super().get_context_data(**kwargs)
  37. context['now'] = timezone.now()
  38. return context
  39. **Example myapp/urls.py**::
  40. from django.conf.urls import url
  41. from article.views import ArticleDetailView
  42. urlpatterns = [
  43. url(r'^(?P<slug>[-\w]+)/$', ArticleDetailView.as_view(), name='article-detail'),
  44. ]
  45. **Example myapp/article_detail.html**:
  46. .. code-block:: html+django
  47. <h1>{{ object.headline }}</h1>
  48. <p>{{ object.content }}</p>
  49. <p>Reporter: {{ object.reporter }}</p>
  50. <p>Published: {{ object.pub_date|date }}</p>
  51. <p>Date: {{ now|date }}</p>
  52. ``ListView``
  53. ============
  54. .. class:: django.views.generic.list.ListView
  55. A page representing a list of objects.
  56. While this view is executing, ``self.object_list`` will contain the list of
  57. objects (usually, but not necessarily a queryset) that the view is
  58. operating upon.
  59. **Ancestors (MRO)**
  60. This view inherits methods and attributes from the following views:
  61. * :class:`django.views.generic.list.MultipleObjectTemplateResponseMixin`
  62. * :class:`django.views.generic.base.TemplateResponseMixin`
  63. * :class:`django.views.generic.list.BaseListView`
  64. * :class:`django.views.generic.list.MultipleObjectMixin`
  65. * :class:`django.views.generic.base.View`
  66. **Method Flowchart**
  67. 1. :meth:`~django.views.generic.base.View.dispatch()`
  68. 2. :meth:`~django.views.generic.base.View.http_method_not_allowed()`
  69. 3. :meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names()`
  70. 4. :meth:`~django.views.generic.list.MultipleObjectMixin.get_queryset()`
  71. 5. :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name()`
  72. 6. :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_data()`
  73. 7. ``get()``
  74. 8. :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response()`
  75. **Example views.py**::
  76. from django.views.generic.list import ListView
  77. from django.utils import timezone
  78. from articles.models import Article
  79. class ArticleListView(ListView):
  80. model = Article
  81. def get_context_data(self, **kwargs):
  82. context = super().get_context_data(**kwargs)
  83. context['now'] = timezone.now()
  84. return context
  85. **Example myapp/urls.py**::
  86. from django.conf.urls import url
  87. from article.views import ArticleListView
  88. urlpatterns = [
  89. url(r'^$', ArticleListView.as_view(), name='article-list'),
  90. ]
  91. **Example myapp/article_list.html**:
  92. .. code-block:: html+django
  93. <h1>Articles</h1>
  94. <ul>
  95. {% for article in object_list %}
  96. <li>{{ article.pub_date|date }} - {{ article.headline }}</li>
  97. {% empty %}
  98. <li>No articles yet.</li>
  99. {% endfor %}
  100. </ul>
  101. .. class:: django.views.generic.list.BaseListView
  102. A base view for displaying a list of objects. It is not intended to be used
  103. directly, but rather as a parent class of the
  104. :class:`django.views.generic.list.ListView` or other views representing
  105. lists of objects.
  106. **Ancestors (MRO)**
  107. This view inherits methods and attributes from the following views:
  108. * :class:`django.views.generic.list.MultipleObjectMixin`
  109. * :class:`django.views.generic.base.View`
  110. **Methods**
  111. .. method:: get(request, *args, **kwargs)
  112. Adds ``object_list`` to the context. If
  113. :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty`
  114. is True then display an empty list. If
  115. :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` is
  116. False then raise a 404 error.