---
title: "Les fonctions raccourcis de Django"
version: 3.0
locale: fr
source: https://docs.djangoproject.com/fr/3.0/topics/http/shortcuts/
canonical: https://djangodocs.dev/fr/3.0/topics/http/shortcuts/
---
# Les fonctions raccourcis de Django

Le paquet `django.shortcuts` rassemble des fonctions et des classes utilitaires qui recouvrent plusieurs niveaux de l’architecture MVC. En d’autres termes, ces fonctions/classes introduisent un couplage contrôlé à des fins de commodité.

## `render()`

#### `render(request, template_name, context=None, content_type=None, status=None, using=None)`

Combine un gabarit donné avec un dictionnaire contexte donné et renvoie un objet [`HttpResponse`](/fr/3.0/ref/request-response/#django.http.HttpResponse) avec le texte résultant.

Django ne met pas à disposition de fonction raccourci renvoyant une réponse [`TemplateResponse`](/fr/3.0/ref/template-response/#django.template.response.TemplateResponse) parce que le constructeur de [`TemplateResponse`](/fr/3.0/ref/template-response/#django.template.response.TemplateResponse) présente le même niveau de flexibilité que [`render()`](#django.shortcuts.render).

### Paramètres obligatoires

**`request`**

  L’objet requête utilisé pour générer la réponse.

**`template_name`**

  Le nom complet d’un gabarit à utiliser ou une liste de noms de gabarits. Si une liste est donnée, le premier gabarit de la liste qui est trouvé sera utilisé. Consultez la [documentation du chargement de gabarits](/fr/3.0/topics/templates/#template-loading) pour plus d’informations sur la façon dont les gabarits sont recherchés.

### Paramètres facultatifs

**`context`**

  Un dictionnaire de valeurs à ajouter un contexte du gabarit. Par défaut, ce dictionnaire est vide. Si une des valeurs du dictionnaire est exécutable, la vue l’appellera immédiatement avant de faire le rendu du gabarit.

**`content_type`**

  Le type MIME à utiliser pour le document produit. La valeur par défaut est `'text/html'`.

**`status`**

  Le code d’état de la réponse. La valeur par défaut est `200`.

**`using`**

  Le nom [`NAME`](/fr/3.0/ref/settings/#std-setting-TEMPLATES-NAME) d’un moteur de gabarit à utiliser pour charger le gabarit.

### Exemple

L’exemple suivant effectue le rendu du gabarit `myapp/index.html` avec le type MIME `application/xhtml+xml`:

```
from django.shortcuts import render

def my_view(request):
    # View code here...
    return render(request, 'myapp/index.html', {
        'foo': 'bar',
    }, content_type='application/xhtml+xml')
```

Cet exemple est équivalent à :

```
from django.http import HttpResponse
from django.template import loader

def my_view(request):
    # View code here...
    t = loader.get_template('myapp/index.html')
    c = {'foo': 'bar'}
    return HttpResponse(t.render(c, request), content_type='application/xhtml+xml')
```

## `redirect()`

#### `redirect(to, *args, permanent=False, **kwargs)`

Renvoie une réponse [`HttpResponseRedirect`](/fr/3.0/ref/request-response/#django.http.HttpResponseRedirect) à l’URL correspondant aux paramètres transmis.

Les paramètres peuvent être :

- Un modèle : la fonction [`get_absolute_url()`](/fr/3.0/ref/models/instances/#django.db.models.Model.get_absolute_url) du modèle sera appelée.
- Un nom de vue, et potentiellement des paramètres : [`reverse()`](/fr/3.0/ref/urlresolvers/#django.urls.reverse) sera utilisée pour résoudre le nom.
- Une URL absolue ou relative qui sera utilisée telle quelle comme emplacement de redirection.

Produit par défaut une redirection temporaire ; indiquez `permanent=True` pour produire une redirection permanente.

### Exemples

La fonction [`redirect()`](#django.shortcuts.redirect) peut être utilisée de différentes manières.

1. En lui passant un objet ; la méthode [`get_absolute_url()`](/fr/3.0/ref/models/instances/#django.db.models.Model.get_absolute_url) de l’objet est appelée pour produire l’URL de redirection :

   ```
   from django.shortcuts import redirect

   def my_view(request):
       ...
       obj = MyModel.objects.get(...)
       return redirect(obj)
   ```
2. En lui passant le nom d’une vue et, en option, des paramètres positionnels ou nommés ; l’URL sera résolue en utilisant la méthode [`reverse()`](/fr/3.0/ref/urlresolvers/#django.urls.reverse):

   ```
   def my_view(request):
       ...
       return redirect('some-view-name', foo='bar')
   ```
3. En lui passant une URL de redirection fixe :

   ```
   def my_view(request):
       ...
       return redirect('/some/url/')
   ```

   Cela fonctionne aussi avec des URL complètes :

   ```
   def my_view(request):
       ...
       return redirect('https://example.com/')
   ```

Par défaut, [`redirect()`](#django.shortcuts.redirect) renvoie une redirection temporaire. Toutes les formes ci-dessus acceptent un paramètre `permanent` qui, s’il est défini à `True`, produit une redirection permanente :

```
def my_view(request):
    ...
    obj = MyModel.objects.get(...)
    return redirect(obj, permanent=True)
```

## `get_object_or_404()`

#### `get_object_or_404(klass, *args, **kwargs)`

Appelle [`get()`](/fr/3.0/ref/models/querysets/#django.db.models.query.QuerySet.get) d’un gestionnaire de modèle donné, mais génère une exception [`Http404`](/fr/3.0/topics/http/views/#django.http.Http404) au lieu de l’exception [`DoesNotExist`](/fr/3.0/ref/models/class/#django.db.models.Model.DoesNotExist) du modèle.

### Paramètres obligatoires

**`klass`**

  Une classe [`Model`](/fr/3.0/ref/models/instances/#django.db.models.Model), un [`Manager`](/fr/3.0/topics/db/managers/#django.db.models.Manager) ou une instance [`QuerySet`](/fr/3.0/ref/models/querysets/#django.db.models.query.QuerySet) comme source de l’objet.

**`**kwargs`**

  Paramètres de recherche, dans un format accepté par `get()` et `filter()`.

### Exemple

L’exemple suivant obtient l’objet\`\`MyModel\`\` ayant la clé primaire 1 :

```
from django.shortcuts import get_object_or_404

def my_view(request):
    obj = get_object_or_404(MyModel, pk=1)
```

Cet exemple est équivalent à :

```
from django.http import Http404

def my_view(request):
    try:
        obj = MyModel.objects.get(pk=1)
    except MyModel.DoesNotExist:
        raise Http404("No MyModel matches the given query.")
```

Le cas le plus courant est de transmettre un [`Model`](/fr/3.0/ref/models/instances/#django.db.models.Model), comme montré ci-dessus. Cependant, vous pouvez aussi transmettre une instance [`QuerySet`](/fr/3.0/ref/models/querysets/#django.db.models.query.QuerySet):

```
queryset = Book.objects.filter(title__startswith='M')
get_object_or_404(queryset, pk=1)
```

L’exemple ci-dessus est un peu tiré par les cheveux, car il est équivalent à :

```
get_object_or_404(Book, title__startswith='M', pk=1)
```

mais cela reste utile dans les cas où vous recevez une variable `queryset` par un autre moyen.

Finalement, vous pouvez aussi utiliser un gestionnaire ([`Manager`](/fr/3.0/topics/db/managers/#django.db.models.Manager)). C’est utile par exemple si vous avez un [gestionnaire personnalisé](/fr/3.0/topics/db/managers/#custom-managers)

```
get_object_or_404(Book.dahl_objects, title='Matilda')
```

Il est aussi possible d’utiliser des [`gestionnaires de liaison`](/fr/3.0/ref/models/relations/#django.db.models.fields.related.RelatedManager):

```
author = Author.objects.get(name='Roald Dahl')
get_object_or_404(author.book_set, title='Matilda')
```

Note : comme pour `get()`, une exception [`MultipleObjectsReturned`](/fr/3.0/ref/exceptions/#django.core.exceptions.MultipleObjectsReturned) sera levée si plus d’un objet est renvoyé.

## `get_list_or_404()`

#### `get_list_or_404(klass, *args, **kwargs)`

Renvoie le résultat de [`filter()`](/fr/3.0/ref/models/querysets/#django.db.models.query.QuerySet.filter) sur un gestionnaire de modèle donné transformé en liste, générant [`Http404`](/fr/3.0/topics/http/views/#django.http.Http404) si la liste résultante est vide.

### Paramètres obligatoires

**`klass`**

  Une instance de [`Model`](/fr/3.0/ref/models/instances/#django.db.models.Model), [`Manager`](/fr/3.0/topics/db/managers/#django.db.models.Manager) ou [`QuerySet`](/fr/3.0/ref/models/querysets/#django.db.models.query.QuerySet) comme source de la liste d’objets.

**`**kwargs`**

  Paramètres de recherche, dans un format accepté par `get()` et `filter()`.

### Exemple

L’exemple suivant récupère tous les objets publiés de

```
from django.shortcuts import get_list_or_404

def my_view(request):
    my_objects = get_list_or_404(MyModel, published=True)
```

Cet exemple est équivalent à :

```
from django.http import Http404

def my_view(request):
    my_objects = list(MyModel.objects.filter(published=True))
    if not my_objects:
        raise Http404("No MyModel matches the given query.")
```
