====== 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.