• 3.1
  • 3.2
  • 5.0
  • Версия документации: 6.1

Общие виды отображения

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

DetailView

class django.views.generic.detail.DetailView

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

Классы-предки, Ancestors (MRO)

Представление наследует методы и атрибуты из следующего представления:

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

  1. as_view()

  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 или других представлений, представляющих детали одного объекта.

Классы-предки, Ancestors (MRO)

Представление наследует методы и атрибуты из следующего представления:

Методы

get(request, *args, **kwargs)

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

ListView

class django.views.generic.list.ListView

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

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

Классы-предки, Ancestors (MRO)

Представление наследует методы и атрибуты из следующего представления:

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

  1. as_view()

  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>

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

class django.views.generic.list.BaseListView

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

Классы-предки, Ancestors (MRO)

Представление наследует методы и атрибуты из следующего представления:

Методы

get(request, *args, **kwargs)

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

Back to Top