Стандартные режимы отображения

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

DetailView

класс django.views.generic.detail.DetailView

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

Предки (ТОиР)

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

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

  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>
класс django.views.generic.detail.BaseDetailView

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

Предки (ТОиР)

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

Методы

get( запрос , * аргументы , ** kwargs )

Добавляет objectв контекст.

ListView

класс django.views.generic.list.ListView

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

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

Предки (ТОиР)

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

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

  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>

Если вы используете разбиение на страницы, вы можете адаптировать пример шаблона из документации по разбивке на страницы . Измените экземпляры contactsв этом шаблоне примера на page_obj.

класс django.views.generic.list.BaseListView

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

Предки (ТОиР)

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

Методы

get( запрос , * аргументы , ** kwargs )

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

Copyright ©2021 All rights reserved