Classes mixins pour objets multiples

MultipleObjectMixin

class django.views.generic.list.MultipleObjectMixin

Une classe mixin pouvant être utilisée pour afficher une liste d’objets.

Si paginate_by est indiqué, Django pagine les résultats renvoyés par la vue. Il est possible d’indiquer le numéro de page dans l’URL de deux manières différentes :

  • En utilisant le paramètre page dans la configuration d’URL. Par exemple, voici à quoi pourrait ressembler la configuration d’URL :

    path('objects/page<int:page>/', PaginatedView.as_view()),
    
  • En passant le numéro de page comme paramètre dans la chaîne de requête de l’URL. Par exemple, une URL pourrait ressembler à ceci :

    /objects/?page=3
    

Ces listes et valeurs sont indexées à partir de 1, et non 0, ce qui fait que la première page est représentée par la page 1.

Pour plus de détails sur la pagination, lisez la documentation sur la pagination.

Comme cas particulier, il est aussi permis d’utiliser last (dernier) comme valeur pour la variable page:

/objects/?page=last

Cela permet d’accéder à la dernière page des résultats sans devoir d’abord déterminer le nombre total de pages.

Notez que page doit contenir un numéro de page valide ou la valeur last; toute autre valeur transmise à page produit une erreur 404.

Étend

Méthodes et attributs

allow_empty

Une valeur booléenne indiquant s’il faut afficher la page quand aucun objet n’est disponible. Si définie à False et qu’aucun objet n’est disponible, la vue génère une erreur 404 au lieu d’afficher une page vide. La valeur par défaut est True.

model

Le modèle pour lequel cette vue va afficher des données. Indiquer model = Foo revient au même que de définir queryset = Foo.objects.all(), où objects correspond au gestionnaire par défaut de Foo.

queryset

Un objet QuerySet représentant les objets. Lorsqu’elle est renseignée, la valeur de queryset écrase la valeur fournie pour model.

Avertissement

queryset est un attribut de classe avec une valeur modifiable, il faut donc être très prudent lorsqu’on l’utilise directement. Avant de l’utiliser, appelez sa méthode all() ou obtenez-la avec get_queryset() qui se charge du clonage en arrière-plan.

ordering

Une chaîne ou une liste de chaînes indiquant l’ordre de tri à appliquer à queryset. Les valeurs possibles sont les mêmes que pour order_by().

paginate_by

Un nombre entier indiquant combien d’objets doivent être affichés par page. Lorsque cette valeur est présente, la vue pagine les objets avec paginate_by objets par page. La vue s’attend soit à ce que la chaîne de requête de l’URL contienne un paramètre page (par request.GET) ou qu’une variable page ait été définie dans la configuration d’URL.

paginate_orphans

Un nombre entier indiquant le nombre d’objets surnuméraires que la dernière page peut contenir. Cette valeur s’ajoute au nombre paginate_by pour la dernière page, afin d’éviter que la dernière page contienne un très petit nombre d’objets.

page_kwarg

Une chaîne indiquant le nom à utiliser pour le paramètre de page. La vue s’attend à la présence de ce paramètre soit comme paramètre de la chaîne de requête de l’URL (via request.GET) ou comme variable nommée présente dans la configuration d’URL. La valeur par défaut est page.

paginator_class

La classe de pagination à utiliser pour effectuer la pagination. Par défaut, c’est django.core.paginator.Paginator qui est utilisée. Si la classe de pagination personnalisée ne possède pas la même interface de constructeur que django.core.paginator.Paginator, vous devrez également fournir une implémentation pour get_paginator().

context_object_name

Désigne le nom de la variable à utiliser dans le contexte.

get_queryset()

Obtient la liste des éléments de la vue. Ce résultat doit être itérable et peut contenir un jeu de requête (pour lequel le comportement spécifique des jeux de requête est activé).

get_ordering()

Renvoie une chaîne (ou une liste de chaînes) définissant le tri qui sera appliqué à queryset.

Renvoie ordering par défaut.

paginate_queryset(queryset, page_size)

Renvoie un tuple à 4 éléments contenant (paginator, page, object_list, is_paginated).

Construit en paginant queryset en pages de taille page_size. Si la requête contient un paramètre page, soit comme paramètre capturé dans l’URL ou sous forme de paramètre GET, object_list correspondra aux objets de cette page.

get_paginate_by(queryset)

Renvoie le nombre d’éléments sur lequel baser la pagination, ou None pour éviter la pagination. Par défaut, cela renvoie simplement la valeur de paginate_by.

get_paginator(queryset, per_page, orphans=0, allow_empty_first_page=True)

Renvoie une instance de la classe de pagination à utiliser pour cette vue. Par défaut, une instance de paginator_class est renvoyée.

get_paginate_orphans()

Un nombre entier indiquant le nombre d’objets surnuméraires que la dernière page peut contenir. Par défaut, c’est la valeur de paginate_orphans qui est renvoyée.

get_allow_empty()

Renvoie une valeur booléenne indiquant s’il faut afficher la page quand aucun objet n’est disponible. Si cette méthode renvoie False et qu’aucun objet n’est disponible, la vue produit une erreur 404 au lieu d’afficher une page vide. La valeur par défaut est True.

get_context_object_name(object_list)

Renvoie le nom de la variable de contexte utilisée pour contenir la liste des données que cette vue manipule. Si object_list est un jeu de requête d’objets Django et que context_object_name n’est pas défini, le nom du contexte correspondra au nom de modèle des objets contenus dans le jeu de requête, ajouté du suffixe '_list'. Par exemple, pour le modèle Article, la variable de contexte sera nommée par défaut article_list.

get_context_data(**kwargs)

Renvoie les données du contexte pour afficher la liste des objets.

Contexte

  • object_list: la liste des objets que cette vue va afficher. Si context_object_name est renseigné, cette variable sera également définie dans le contexte, avec le même contenu que object_list.
  • is_paginated: une valeur booléenne indiquant si les résultats sont paginés. Plus particulièrement, False est renvoyé si aucune taille de page n’a été indiquée ou si les objets disponibles ne remplissent qu’une seule page.
  • paginator: une instance de django.core.paginator.Paginator. Si les objets ne sont pas paginés, cette variable de contexte vaut None.
  • page_obj: une instance de django.core.paginator.Page. Si les objets ne sont pas paginés, cette variable de contexte vaut None.

MultipleObjectTemplateResponseMixin

class django.views.generic.list.MultipleObjectTemplateResponseMixin

Une classe mixin produisant une réponse basée sur un gabarit pour les vues opérant sur une liste d’instances d’objets. Exige que la vue dans laquelle elle est intégrée fournisse self.object_list, la liste des instances d’objets sur lesquelles la vue opère. self.object_list peut être un objet QuerySet, mais ce n’est pas obligatoire.

Étend

Méthodes et attributs

template_name_suffix

Le suffixe à ajouter au nom de gabarit auto-généré. Le suffixe par défaut est _list.

get_template_names()

Renvoie une liste de noms de gabarits potentiels. Cette liste contient :

  • la valeur de template_name de la vue (s’il est défini)
  • <nom_app>/<nom_modèle><suffixe_gabarit>.html
Back to Top