Django shortcut-Funktionen
Diese Dokumentation gilt für Djangos Entwicklerversion, die zum Teil erhebliche Unterschiede zur letzten veröffentlichen Version aufweist.
Das Paket django.shortcuts umfasst Hilfsfunktionen und -klassen, die verschiedene Ebenen des MVC-Modells miteinander “verbinden”.
Oder mit anderen Worten: Diese Funktionen und Klassen helfen dir, verschiedene Ebenen schnell und bequem zu verbinden und zu nutzen.
render_to_response()
django.shortcuts.render_to_response erzeugt ein Template unter Einbeziehung eines an die Funktion übergebenen Context-Dictionary und liefert als Rückgabewert ein HttpResponse-Objekt mit dem fertig erzeugten Text.
Optionale Argumente
- dictionary
- Ein Dictionary von zum Template hinzuzufügenden Werten. Standardmäßig handelt es sich hierbei um ein leeres Dictionary. Ist ein Wert innerhalb des Dictionary aufrufbar, so wird ihn der View kurz vor der Templateerzeugung aufrufen.
- context_instance
Die Template-Kontext-Instanz, die zum Rendern des Template benutzt wird. Standardmäßig wird das Template mit einer Context-Instanz (gefüllt mit den Werten aus dictionary) gerendert. Wenn du Template-Context Prozessoren benutzen willst, solltest du das Template stattdessen mit einer RequestContext-Instanz rendern. Dein Code dürfte dann so ähnlich aussehen:
return render_to_response('my_template.html', my_data_dictionary, context_instance=RequestContext(request))- mimetype
- Neu in Djangos Entwicklerversion: Gibt den MIME-Typ des zu erzeugenden Dokuments an. Standardmäßig wird der Wert der Umgebungsvariable DEFAULT_CONTENT_TYPE genutzt.
Beispiel
Das folgende Beispiel erzeugt eine Ausgabe unter Einbeziehung des Templates myapp/index.html mit dem MIME-Typ application/xhtml+xml:
from django.shortcuts import render_to_response
def my_view(request):
# View-Quelltext hier...
return render_to_response('myapp/index.html', {"foo": "bar"},
mimetype="application/xhtml+xml")
Das Beispiel ist identisch mit:
from django.http import HttpResponse
from django.template import Context, loader
def my_view(request):
# View-Quelltext hier...
t = loader.get_template('myapp/template.html')
c = Context({'foo': 'bar'})
r = HttpResponse(t.render(c),
mimetype="application/xhtml+xml")
get_object_or_404
django.shortcuts.get_object_or_404 ruft die Methode get() des übergebenen Model-Manager auf, löst jedoch im Fehlerfall django.http.Http404 statt die übliche Model-Exception DoesNotExist aus.
Erforderliche Argumente
- klass
- Eine Model, Manager oder QuerySet-Instanz, von der das Objekt bezogen werden soll.
- **kwargs
- Abfrageparameter, die im selbigen Format vorliegen sollten, wie sie von get() und filter() akzeptiert werden.
Beispiel
Das folgende Beispiel bezieht das Objekt mit dem Primärschlüssel 1 von MyModel:
from django.shortcuts import get_object_or_404
def my_view(request):
my_object = get_object_or_404(MyModel, pk=1)
Dieses Beispiel ist identisch mit:
from django.http import Http404
def my_view(request):
try:
my_object = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404
Hinweis: Wie bei get() wird die Exception MultipleObjectsReturned ausgelöst, wenn mehr als ein Objekt gefunden wird.
get_list_or_404
django.shortcuts.get_list_or_404 liefert das Ergebnis des Funktionsaufrufs filter() zurück und löst die Exception django.http.Http404 aus, wenn die zurückgegebene Liste leer ist.
Erforderliche Argumente
- klass
- Eine Model, Manager oder QuerySet-Instanz, von der das Objekt bezogen werden soll.
- **kwargs
- Abfrageparameter, die im selbigen Format vorliegen sollten, wie sie von get() und filter() akzeptiert werden.
Beispiel
Das folgende Beispiel bezieht alle veröffentlichten Objekte von MyModel:
from django.shortcuts import get_list_or_404
def my_view(request):
my_objects = get_list_or_404(MyModel, published=True)
Das Beispiel ist identisch mit:
from django.http import Http404
def my_view(request):
my_objects = MyModels.objects.filter(published=True)
if not my_objects:
raise Http404