Vues génériques d’affichage

Les deux vues fondées sur des classes suivantes sont conçues pour afficher des données. Pour beaucoup de projets, il s’agit habituellement des vues les plus fréquemment utilisées.

DetailView

class django.views.generic.detail.DetailView

Dans le code de cette vue, self.object contient l’objet sur lequel portent les opérations de la vue.

Ancêtres (MRO)

Cette vue hérite des méthodes et des attributs des vues suivantes :

Index des méthodes

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

Exemple 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

Exemple myapp/urls.py :

from django.urls import path

from article.views import ArticleDetailView

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

Exemple 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

Une page représentant une liste d’objets.

Dans le code de cette vue, self.object_list contient la liste d’objets (normalement un jeu de requête, mais pas toujours) sur laquelle portent les opérations de la vue.

Ancêtres (MRO)

Cette vue hérite des méthodes et des attributs des vues suivantes :

Index des méthodes

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

Exemple de fichier 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

Exemple myapp/urls.py :

from django.urls import path

from article.views import ArticleListView

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

Exemple 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 vous utilisez la pagination, vous pouvez adapter le gabarit exemple de la documentation de pagination. Modifiez les instances de contacts de cet exemple en objet_page.

class django.views.generic.list.BaseListView

Une vue de base pour l’affichage d’une liste d’objets. Elle n’est pas conçue pour être utilisée directement, mais plutôt comme classe parente pour django.views.generic.list.ListView ou d’autres vues représentant des listes d’objets.

Ancêtres (MRO)

Cette vue hérite des méthodes et des attributs des vues suivantes :

Méthodes

get(request, *args, **kwargs)

Ajoute object_list au contexte. Si allow_empty vaut True, une liste vide est affichée. Si allow_empty vaut False, une erreur 404 est générée.

Back to Top