Spec-Zone.ru › Django 2.1

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

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

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. dispatch()
  2. http_method_not_allowed()
  3. get_template_names()
  4. get_slug_field()
  5. get_queryset()
  6. get_object()
  7. get_context_object_name()
  8. get_context_data()
  9. get()
  10. 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)

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

  • 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. dispatch()
  2. http_method_not_allowed()
  3. get_template_names()
  4. get_queryset()
  5. get_context_object_name()
  6. get_context_data()
  7. get()
  8. 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 на %%%CODE_BLOCK_41%%.

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/2.1/ref/class-based-views/generic-display/

Spec-Zone.ru

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