Spec-Zone.ru › Django 3.2

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

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

DetailView

class django.views.generic.detail.DetailView

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

Предки (MRO)

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

  • django.views.generic.detail.SingleObjectTemplateResponseMixin
  • django.views.generic.base.TemplateResponseMixin
  • django.views.generic.detail.BaseDetailView
  • django.views.generic.detail.SingleObjectMixin
  • django.views.generic.base.View

Диаграмма потока методов

  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>
class django.views.generic.detail.BaseDetailView

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

Предки (MRO)

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

  • django.views.generic.detail.SingleObjectMixin
  • django.views.generic.base.View

Методы

get(request, *args, **kwargs)

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

ListView

class django.views.generic.list.ListView

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

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

Предки (MRO)

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

  • django.views.generic.list.MultipleObjectTemplateResponseMixin
  • django.views.generic.base.TemplateResponseMixin
  • django.views.generic.list.BaseListView
  • django.views.generic.list.MultipleObjectMixin
  • django.views.generic.base.View

Диаграмма потока методов

  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.

class django.views.generic.list.BaseListView

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

Предки (MRO)

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

  • django.views.generic.list.MultipleObjectMixin
  • django.views.generic.base.View

Методы

get(request, *args, **kwargs)

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

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/ref/class-based-views/generic-display/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API