Las dos siguientes vistas genéricas basadas en clases están diseñadas para mostrar datos. En muchos proyectos, suelen ser las vistas más utilizadas.

DetailView

class django.views.generic.detail.DetailView

Mientras se ejecuta esta vista, self.object contendrá el objeto sobre el que está operando la vista.

Ancestros (MRO)

Esta vista hereda métodos y atributos de las siguientes vistas:

  • 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

Diagrama de flujo del método

  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()

Ejemplo 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

Ejemplo myapp / urls.py:

from django.urls import path

from article.views import ArticleDetailView

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

Ejemplo 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

Una vista base para mostrar un solo objeto. No está destinado a ser utilizado directamente, sino más bien como una clase padre del django.views.generic.detail.DetailView u otras vistas que representen detalles de un solo objeto.

Ancestros (MRO)

Esta vista hereda métodos y atributos de las siguientes vistas:

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

Métodos

get(request, *args, **kwargs)

Agrega object al contexto.

ListView

class django.views.generic.list.ListView

Una página que representa una lista de objetos.

Mientras se ejecuta esta vista, self.object_list contendrá la lista de objetos (normalmente, pero no necesariamente un conjunto de consultas) sobre los que opera la vista.

Ancestros (MRO)

Esta vista hereda métodos y atributos de las siguientes vistas:

  • 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

Diagrama de flujo del método

  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()

Ejemplo 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

Ejemplo myapp / urls.py:

from django.urls import path

from article.views import ArticleListView

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

Ejemplo 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>

Si está utilizando la paginación, puede adaptar el plantilla de ejemplo de los documentos de paginación. Cambiar instancias de contacts en esa plantilla de ejemplo para page_obj.

class django.views.generic.list.BaseListView

Una vista base para mostrar una lista de objetos. No está destinado a ser utilizado directamente, sino más bien como una clase padre del django.views.generic.list.ListView u otras vistas que representan listas de objetos.

Ancestros (MRO)

Esta vista hereda métodos y atributos de las siguientes vistas:

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

Métodos

get(request, *args, **kwargs)

Agrega object_list al contexto. Si allow_empty es Verdadero y luego muestra una lista vacía. Si allow_empty es Falso y luego genera un error 404.