Общие представления дисплея

Два следующих общих представления на основе классов предназначены для отображения данных. Во многих проектах они, как правило, являются наиболее часто используемыми представлениями.

DetailView

class django.views.generic.detail.DetailView

Во время выполнения этого представления self.object будет содержать объект, над которым работает представление.

Предки (MRO)

Это представление наследует методы и атрибуты от следующих представлений:

** Блок-схема метода**

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. get_template_names()
  5. get_slug_field()
  6. get_queryset()
  7. get_object()
  8. get_context_object_name()
  9. get_context_data()
  10. get()
  11. render_to_response()

Пример myapp/views.py:

from django.utils import timezone
from django.views.generic.detail import DetailView

from articles.models import Article

class ArticleDetailView(DetailView):

    model = Article

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['now'] = timezone.now()
        return context

Пример myapp/urls.py:

from django.urls import path

from article.views import ArticleDetailView

urlpatterns = [
    path('<slug:slug>/', ArticleDetailView.as_view(), name='article-detail'),
]

Пример myapp/article_detail.html:

<h1>{{ object.headline }}</h1>
<p>{{ object.content }}</p>
<p>Reporter: {{ object.reporter }}</p>
<p>Published: {{ object.pub_date|date }}</p>
<p>Date: {{ now|date }}</p>

ListView

class django.views.generic.list.ListView

Страница, представляющая список объектов.

Во время выполнения этого представления self.object_list будет содержать список объектов (обычно, но не обязательно кверисет), над которыми работает представление.

Предки (MRO)

Это представление наследует методы и атрибуты от следующих представлений:

** Блок-схема метода**

  1. setup()
  2. dispatch()
  3. http_method_not_allowed()
  4. get_template_names()
  5. get_queryset()
  6. get_context_object_name()
  7. get_context_data()
  8. get()
  9. render_to_response()

Пример views.py:

from django.utils import timezone
from django.views.generic.list import ListView

from articles.models import Article

class ArticleListView(ListView):

    model = Article
    paginate_by = 100  # if pagination is desired

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['now'] = timezone.now()
        return context

Пример myapp/urls.py:

from django.urls import path

from article.views import ArticleListView

urlpatterns = [
    path('', ArticleListView.as_view(), name='article-list'),
]

Пример myapp/article_list.html:

<h1>Articles</h1>
<ul>
{% for article in object_list %}
    <li>{{ article.pub_date|date }} - {{ article.headline }}</li>
{% empty %}
    <li>No articles yet.</li>
{% endfor %}
</ul>

Если вы используете пагинацию, вы можете адаптировать example template from the pagination docs. Измените экземпляры contacts в шаблоне примера на page_obj.

class django.views.generic.list.BaseListView

Базовое представление для отображения списка объектов. Оно не предназначено для непосредственного использования, а скорее как родительский класс django.views.generic.list.ListView или других представлений, представляющих списки объектов.

Предки (MRO)

Это представление наследует методы и атрибуты от следующих представлений:

Методы

get(request, *args, **kwargs)

Добавляет object_list к контексту. Если allow_empty равно True, то выводит пустой список. Если allow_empty равно False, то выдает ошибку 404.

Вернуться на верх