====== La classe Shortcuts ====== Cette classe contient des raccourcis de fonctions permettant de réduire de manière significative le volume de code écrit. Utile notamment sur des fonctions particulièrement utilisées. ===== render, raccourci de chargement de template ===== Soit une classe Monobjet. L'affichage des objets de cette classe via un template peut se faire grâce à [[https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.Context|Context]] : * on importe ceKiVaBien * On récupère les objets dans un variable //mon_objet_list// * On charge le template d'affichage dans une variable //template// * On crée une variable context qui contient le dictionnaire des correspondances objets Python / variables de template * On retourne un objet //HttpResponse// qui contient le template rendu from django.http import HttpResponse from django.template import Context, loader from monApp.models import Monobjet def index(request): mon_objet_list = Monobjet.objects.all() template = loader.get_template('monTemplate.html') context = Context({ 'mon_objet_list': mon_objet_list, }) return HttpResponse(template.render(context)) Grâce à [[https://docs.djangoproject.com/en/dev/topics/http/shortcuts/|Shortcuts]], il est possible de réduire cette quantité de code avec la fonction //render//. Le résultat est strictement identique : from django.shortcuts import render from monApp.models import Monobjet def index(request): mon_objet_list = Monobjet.objects.all() context = {'mon_objet_list': mon_objet_list} return render(request, 'monTemplate.html', context) render possède trois arguments * l'objet HttpRequest (ici //request//) * le nom du template (ici //monTemplate.html//) * un dictionnaire contenant les variables du contexte (ici //context//) ===== get_object_or_404, un objet sinon rien ===== La méthode complète def detail(request, poll_id): try: objet = Classe.objects.get(pk=_id) except Classe.DoesNotExist: raise Http404 return render(request, 'template.html', {'objet': objet}) La version courte def detail(request, poll_id): objet = get_object_or_404(Classe, pk=_id) return render(request, 'template.html', {'objet': objet}) //get_object_or_404// prend en paramètre le modèle et les arguments nécessaires à la recherche de l'objet (ici la [[https://docs.djangoproject.com/en/dev/topics/db/models/#automatic-primary-key-fields|Primary Key]]). ===== get_list_or_404 ===== Idem [[#get_object_or_404_un_objet_sinon_rien|get_objet_or_404]], mais utilise //filter// au lieu de get et renvoie donc...une liste.