Vues de base

Les trois classes suivantes fournissent la plupart des fonctionnalités nécessaires à la création de vues Django. Vous pouvez les considérer comme des vues parentes qui peuvent être utilisées telles quelles ou comme classe parente. Elles ne contiennent pas toutes les fonctionnalités requises par les projets, c’est pour cela qu’il y a des vues basées sur des classes de type Mixin et d’autres génériques.

Many of Django’s built-in class-based views inherit from other class-based views or various mixins. Because this inheritance chain is very important, the ancestor classes are documented under the section title of Ancestors (MRO). MRO is an acronym for Method Resolution Order.

View

class django.views.generic.base.View

La principale vue basée sur des classes. Toutes les autres héritent de cette classe de base.

Index des méthodes

  1. dispatch()
  2. http_method_not_allowed()
  3. options()

Exemple de fichier views.py:

from django.http import HttpResponse
from django.views.generic import View

class MyView(View):

    def get(self, request, *args, **kwargs):
        return HttpResponse('Hello, World!')

Exemple de fichier urls.py:

from django.conf.urls import patterns, url

from myapp.views import MyView

urlpatterns = patterns('',
    url(r'^mine/$', MyView.as_view(), name='my-view'),
)

Attributs

http_method_names

La liste des noms de méthodes HTTP que cette vue accepte.

Valeur par défaut :

['get', 'post', 'put', 'delete', 'head', 'options', 'trace']

Méthodes

classmethod as_view(**initkwargs)

Renvoie une vue exécutable acceptant une requête et renvoyant une réponse :

response = MyView.as_view()(request)
dispatch(request, *args, **kwargs)

La partie view de la vue, la méthode qui accepte un paramètre request ainsi que d’autres paramètres et qui renvoie une réponse HTTP.

L’implémentation par défaut examine la méthode HTTP et essaie de déléguer l’exécution à une méthode qui correspond à la méthode HTTP ; une requête GET sera déléguée à get(), une requête POST à post(), et ainsi de suite.

Par défaut, une requête HEAD sera déléguée à get(). Si vous avez besoin de traiter différemment les requêtes HEAD, vous pouvez surcharger la méthode head(). Voir l’exemple dans Supporting other HTTP methods.

http_method_not_allowed(request, *args, **kwargs)

Si la vue a été appelée par une méthode HTTP qu’elle ne prend pas en charge, c’est cette méthode qui sera appelée.

L’implémentation par défaut renvoie HttpResponseNotAllowed avec une liste de méthodes autorisées en texte brut.

options(request, *args, **kwargs)

Traite la réponse aux requêtes du verbe HTTP OPTIONS. Renvoie une liste des noms de méthodes HTTP autorisées pour la vue.

TemplateView

class django.views.generic.base.TemplateView

Effectue le rendu d’un gabarit donné, avec le contexte contenant les paramètres capturés dans l’URL.

Changed in Django 1.5: The context used to be populated with a {{ params }} dictionary of the parameters captured in the URL. Now those parameters are first-level context variables.

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

Exemple de fichier views.py:

from django.views.generic.base import TemplateView

from articles.models import Article

class HomePageView(TemplateView):

    template_name = "home.html"

    def get_context_data(self, **kwargs):
        context = super(HomePageView, self).get_context_data(**kwargs)
        context['latest_articles'] = Article.objects.all()[:5]
        return context

Exemple de fichier urls.py:

from django.conf.urls import patterns, url

from myapp.views import HomePageView

urlpatterns = patterns('',
    url(r'^$', HomePageView.as_view(), name='home'),
)

Contexte

  • Populated (through ContextMixin) with the keyword arguments captured from the URL pattern that served the view.

RedirectView

class django.views.generic.base.RedirectView

Redirection vers l’URL donnée

The given URL may contain dictionary-style string formatting, which will be interpolated against the parameters captured in the URL. Because keyword interpolation is always done (even if no arguments are passed in), any "%" characters in the URL must be written as "%%" so that Python will convert them to a single percent sign on output.

If the given URL is None, Django will return an HttpResponseGone (410).

Ancêtres (MRO)

This view inherits methods and attributes from the following view:

Index des méthodes

  1. dispatch()
  2. http_method_not_allowed()
  3. get_redirect_url()

Exemple de fichier views.py:

from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404
from django.views.generic.base import RedirectView

from articles.models import Article

class ArticleCounterRedirectView(RedirectView):

    permanent = False
    query_string = True

    def get_redirect_url(self, pk):
        article = get_object_or_404(Article, pk=pk)
        article.update_counter()
        return reverse('product_detail', args=(pk,))

Exemple de fichier urls.py:

from django.conf.urls import patterns, url
from django.views.generic.base import RedirectView

from article.views import ArticleCounterRedirectView

urlpatterns = patterns('',

    url(r'^(?P<pk>\d+)/$', ArticleCounterRedirectView.as_view(), name='article-counter'),
    url(r'^go-to-django/$', RedirectView.as_view(url='http://djangoproject.com'), name='go-to-django'),
)

Attributs

url

The URL to redirect to, as a string. Or None to raise a 410 (Gone) HTTP error.

permanent

Whether the redirect should be permanent. The only difference here is the HTTP status code returned. If True, then the redirect will use status code 301. If False, then the redirect will use status code 302. By default, permanent is True.

query_string

Whether to pass along the GET query string to the new location. If True, then the query string is appended to the URL. If False, then the query string is discarded. By default, query_string is False.

Méthodes

get_redirect_url(**kwargs)

Constructs the target URL for redirection.

The default implementation uses url as a starting string, performs expansion of % parameters in that string, as well as the appending of query string if requested by query_string. Subclasses may implement any behavior they wish, as long as the method returns a redirect-ready URL string.