Outils pour utilisateurs

Outils du site


django:shortcuts

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 à 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 à 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 Primary Key).

get_list_or_404

Idem get_objet_or_404, mais utilise filter au lieu de get et renvoie donc…une liste.

django/shortcuts.txt · Dernière modification: 2016/10/17 13:56 (modification externe)