Vistas de visualización genéricas

Las dos siguientes vistas de clase basadas en el patrón genérico están diseñadas para mostrar datos. En muchos proyectos, suelen ser las vistas más comúnmente 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:

Diagrama de flujo de métodos

  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

Vista base para mostrar un objeto único. No se debe utilizar directamente, sino como clase padre de la django.views.generic.detail.DetailView o otras vistas que representan detalles de un objeto único.

Ancestros (MRO)

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

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 (generalmente, pero no necesariamente un queryset) sobre los que está operando la vista.

Ancestros (MRO)

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

Diagrama de flujo de métodos

  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ás utilizando la paginación, puedes adaptar el ejemplo de plantilla del documento de paginación.

class django.views.generic.list.BaseListView

Una vista base para mostrar una lista de objetos. No se pretende utilizar directamente, sino como clase padre de la django.views.generic.list.ListView o otras vistas que representan listas de objetos.

Ancestros (MRO)

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

Métodos

get(request, *args, **kwargs)

Agrega object_list al contexto. Si allow_empty es True muestra una lista vacía. Si allow_empty es False lanza un error 404.