| 1 |
================================= |
|---|
| 2 |
Fonctions de raccourcis de Django |
|---|
| 3 |
================================= |
|---|
| 4 |
|
|---|
| 5 |
Le module ``django.shortcuts`` contient un ensemble de fonctions et de classes |
|---|
| 6 |
d'aide couvrant de multiples niveau de l'architecture MVC. En d'autres termes, |
|---|
| 7 |
ces fonctions/classes introduisent un couplage contrÎlé, pour notre |
|---|
| 8 |
commodité. |
|---|
| 9 |
|
|---|
| 10 |
``render_to_response()`` |
|---|
| 11 |
======================== |
|---|
| 12 |
|
|---|
| 13 |
``django.shortcuts.render_to_response`` rend un gabarit donné avec un |
|---|
| 14 |
dictionnaire contextuel et retourne un objet ``HttpResponse`` de ce texte |
|---|
| 15 |
rendu. |
|---|
| 16 |
|
|---|
| 17 |
Arguments obligatoires |
|---|
| 18 |
---------------------- |
|---|
| 19 |
|
|---|
| 20 |
``template`` |
|---|
| 21 |
Le nom complet du gabarit à utiliser. |
|---|
| 22 |
|
|---|
| 23 |
Arguments optionnels |
|---|
| 24 |
-------------------- |
|---|
| 25 |
|
|---|
| 26 |
``dictionary`` |
|---|
| 27 |
Un dictionnaire de données à ajouter au contexte du gabarit. Par défaut, |
|---|
| 28 |
il s'agit d'un dictionnaire vide. Si une valeur du dictionnaire est |
|---|
| 29 |
exécutable, la vue l'appellera juste avant le rendu du gabarit. |
|---|
| 30 |
|
|---|
| 31 |
``context_instance`` |
|---|
| 32 |
L'instance contextuelle avec laquelle rendre le gabarit. Par défaut, le |
|---|
| 33 |
gabarit sera rendu avec une instance ``Context`` (remplie avec les valeurs |
|---|
| 34 |
de ``dictionary``). Si vous avez besoin d'un `context processors`_, |
|---|
| 35 |
utilisez à la place une instance ``RequestContext`` pour rendre le |
|---|
| 36 |
gabarit. Votre code ressemblera à quelque chose comme:: |
|---|
| 37 |
|
|---|
| 38 |
return render_to_response('mon_gabarit.html', |
|---|
| 39 |
mon_dictionaire_de_donnees, |
|---|
| 40 |
context_instance=RequestContext(request)) |
|---|
| 41 |
|
|---|
| 42 |
``mimetype`` |
|---|
| 43 |
**Nouveau dans la version de développement de Django:** Le type MIME à |
|---|
| 44 |
utiliser pour le document résultant. Par défaut utilise la valeur de la |
|---|
| 45 |
propriété ``DEFAULT_CONTENT_TYPE``. |
|---|
| 46 |
|
|---|
| 47 |
.. _`context processors`: ../templates_python/#subclassing-context-requestcontext |
|---|
| 48 |
|
|---|
| 49 |
Exemple |
|---|
| 50 |
------- |
|---|
| 51 |
|
|---|
| 52 |
L'exemple suivant rend le gabarit ``monapp/index.html`` avec le type MIME |
|---|
| 53 |
``application/xhtml+xml``:: |
|---|
| 54 |
|
|---|
| 55 |
from django.shortcuts import render_to_response |
|---|
| 56 |
|
|---|
| 57 |
def ma_vue(request): |
|---|
| 58 |
# Code de la vue... |
|---|
| 59 |
return render_to_response('monapp/index.html', {"foo": "bar"}, |
|---|
| 60 |
mimetype="application/xhtml+xml") |
|---|
| 61 |
|
|---|
| 62 |
Cet exemple est équivalent à :: |
|---|
| 63 |
|
|---|
| 64 |
from django.http import HttpResponse |
|---|
| 65 |
from django.template import Context, loader |
|---|
| 66 |
|
|---|
| 67 |
def ma_vue(request): |
|---|
| 68 |
# Code de la vue... |
|---|
| 69 |
t = loader.get_template('monapp/template.html') |
|---|
| 70 |
c = Context({'foo': 'bar'}) |
|---|
| 71 |
r = HttpResponse(t.render(c), |
|---|
| 72 |
mimetype="application/xhtml+xml") |
|---|
| 73 |
|
|---|
| 74 |
``get_object_or_404`` |
|---|
| 75 |
===================== |
|---|
| 76 |
|
|---|
| 77 |
``django.shortcuts.get_object_or_404`` appelle `get()`_ sur un manager de |
|---|
| 78 |
modÚle donné, mais elle lÚve ``django.http.Http404`` au lieu de l'exception |
|---|
| 79 |
de modÚle ``DoesNotExist``. |
|---|
| 80 |
|
|---|
| 81 |
Arguments obligatoires |
|---|
| 82 |
---------------------- |
|---|
| 83 |
|
|---|
| 84 |
``klass`` |
|---|
| 85 |
Une instance de ``Model``, ``Manager`` ou ``QuerySet`` Ã partir duquel |
|---|
| 86 |
récupérer l'objet. |
|---|
| 87 |
|
|---|
| 88 |
``**kwargs`` |
|---|
| 89 |
ParamÚtres de recherche, qui doivent être dans le format accepté par |
|---|
| 90 |
``get()`` et ``filter()``. |
|---|
| 91 |
|
|---|
| 92 |
Exemple |
|---|
| 93 |
------- |
|---|
| 94 |
|
|---|
| 95 |
L'exemple suivant récupÚre un objet avec la clé primaire 1 pour ``MonModel``:: |
|---|
| 96 |
|
|---|
| 97 |
from django.shortcuts import get_object_or_404 |
|---|
| 98 |
|
|---|
| 99 |
def ma_vue(request): |
|---|
| 100 |
mon_objet = get_object_or_404(MonModel, pk=1) |
|---|
| 101 |
|
|---|
| 102 |
Cet exemple est équivalent à :: |
|---|
| 103 |
|
|---|
| 104 |
from django.http import Http404 |
|---|
| 105 |
|
|---|
| 106 |
def ma_vue(request): |
|---|
| 107 |
try: |
|---|
| 108 |
mon_objet = MonModel.objects.get(pk=1) |
|---|
| 109 |
except MonModel.DoesNotExist: |
|---|
| 110 |
raise Http404 |
|---|
| 111 |
|
|---|
| 112 |
Note: Tout comme ``get()``, une exception ``MultipleObjectsReturned`` sera |
|---|
| 113 |
levée si plus d'un objet est retrouvé. |
|---|
| 114 |
|
|---|
| 115 |
.. _get(): ../db-api/#get-kwargs |
|---|
| 116 |
|
|---|
| 117 |
``get_list_or_404`` |
|---|
| 118 |
=================== |
|---|
| 119 |
|
|---|
| 120 |
``django.shortcuts.get_list_or_404`` retourne le résultat de `filter()`_ sur |
|---|
| 121 |
une manager de modÚle donné, levant ``django.http.Http404`` si la liste |
|---|
| 122 |
résultante est vide. |
|---|
| 123 |
|
|---|
| 124 |
Arguments obligatoires |
|---|
| 125 |
---------------------- |
|---|
| 126 |
|
|---|
| 127 |
``klass`` |
|---|
| 128 |
Une instance de ``Model``, ``Manager`` ou ``QuerySet`` Ã partir duquel |
|---|
| 129 |
récupérer l'objet. |
|---|
| 130 |
|
|---|
| 131 |
``**kwargs`` |
|---|
| 132 |
ParamÚtres de recherche, qui doivent être dans le format accepté par |
|---|
| 133 |
``get()`` et ``filter()``. |
|---|
| 134 |
|
|---|
| 135 |
Exemple |
|---|
| 136 |
------- |
|---|
| 137 |
|
|---|
| 138 |
L'exemple suivant récupÚre tous les objets publiés pour ``MonModel``:: |
|---|
| 139 |
|
|---|
| 140 |
from django.shortcuts import get_list_or_404 |
|---|
| 141 |
|
|---|
| 142 |
def ma_vue(request): |
|---|
| 143 |
mes_objets = get_list_or_404(MonModel, published=True) |
|---|
| 144 |
|
|---|
| 145 |
Cet exemple est équivalent à :: |
|---|
| 146 |
|
|---|
| 147 |
from django.http import Http404 |
|---|
| 148 |
|
|---|
| 149 |
def ma_vue(request): |
|---|
| 150 |
mes_objets = MonModel.objects.filter(published=True) |
|---|
| 151 |
if not mes_objets: |
|---|
| 152 |
raise Http404 |
|---|
| 153 |
|
|---|
| 154 |
.. _filter(): ../db-api/#filter-kwargs |
|---|