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)[source]¶Combine un gabarit donné avec un dictionnaire contexte donné et renvoie un objet HttpResponse
avec le texte résultant.
Django ne met pas à disposition de fonction raccourci renvoyant une réponse TemplateResponse
parce que le constructeur de TemplateResponse
présente le même niveau de flexibilité que render()
.
request
template_name
context
content_type
DEFAULT_CONTENT_TYPE
.status
200
.using
NAME
d’un moteur de gabarit à utiliser pour charger le gabarit.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')
render_to_response()
¶redirect()
¶redirect
(to, permanent=False, *args, **kwargs)[source]¶Renvoie une réponse HttpResponseRedirect
à l’URL correspondant aux paramètres transmis.
Les paramètres peuvent être :
get_absolute_url()
du modèle sera appelée.reverse()
sera utilisée pour résoudre le nom.Produit par défaut une redirection temporaire ; indiquez permanent=True
pour produire une redirection permanente.
La fonction redirect()
peut être utilisée de différentes manières.
En lui passant un objet ; la méthode 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)
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()
:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
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()
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)[source]¶Appelle get()
d’un gestionnaire de modèle donné, mais génère une exception Http404
au lieu de l’exception DoesNotExist
du modèle.
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
, comme montré ci-dessus. Cependant, vous pouvez aussi transmettre une instance 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
). C’est utile par exemple si vous avez un gestionnaire personnalisé
get_object_or_404(Book.dahl_objects, title='Matilda')
Il est aussi possible d’utiliser des gestionnaires de liaison
:
author = Author.objects.get(name='Roald Dahl')
get_object_or_404(author.book_set, title='Matilda')
Note : comme pour get()
, une exception MultipleObjectsReturned
sera levée si plus d’un objet est renvoyé.
get_list_or_404()
¶get_list_or_404
(klass, *args, **kwargs)[source]¶Renvoie le résultat de filter()
sur un gestionnaire de modèle donné transformé en liste, générant Http404
si la liste résultante est vide.
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.")
mars 30, 2019