Was ist der Unterschied zwischen einer Ansicht (in der Sprache ein Python / Django Noob kann verstehen) render()
, render_to_response()
und direct_to_template()
?
zB aus Nathan Borrors grundlegenden Apps-Beispielen
def comment_edit(request, object_id, template_name='comments/edit.html'):
comment = get_object_or_404(Comment, pk=object_id, user=request.user)
# ...
return render(request, template_name, {
'form': form,
'comment': comment,
})
Aber ich habe auch gesehen
return render_to_response(template_name, my_data_dictionary,
context_instance=RequestContext(request))
Und
return direct_to_template(request, template_name, my_data_dictionary)
Was ist der Unterschied, was in einer bestimmten Situation zu verwenden?
render()
ist ab 1.3 verfügbar.Yuri, Fábio und Frosts Antworten für den Django Noob (dh mich) umformulieren - mit ziemlicher Sicherheit eine Vereinfachung, aber ein guter Ausgangspunkt?
render_to_response()
ist das "Original", erfordert aber, dass Siecontext_instance=RequestContext(request)
fast die ganze Zeit eine PITA einsetzen.direct_to_template()
ist so konzipiert, dass es nur in urls.py ohne eine in views.py definierte Ansicht verwendet wird. Es kann jedoch in views.py verwendet werden, um zu vermeiden, dass RequestContext eingegeben werden mussrender()
ist eine Verknüpfungrender_to_response()
, die automatisch liefertcontext_instance=Request
.... Sie ist in der Django-Entwicklungsversion (1.2.1) verfügbar, aber viele haben ihre eigenen Verknüpfungen erstellt, wie diese , diese oder die, die mich anfangs geworfen hat , Nathans basic.tools. shortcuts.pyquelle
Rendern ist
Es gibt also wirklich keinen Unterschied zwischen,
render_to_response
außer dass es Ihren Kontext umschließt, sodass die Vorlagenvorprozessoren funktionieren.Direkt zur Vorlage ist eine generische Ansicht .
Es macht wirklich keinen Sinn, es hier zu verwenden, da es Overhead
render_to_response
in Form einer Ansichtsfunktion gibt.quelle
Aus Django- Dokumenten :
direct_to_template
ist etwas anderes. Es ist eine generische Ansicht, die ein Datenwörterbuch verwendet, um den HTML-Code ohne die Notwendigkeit von views.py zu rendern. Sie verwenden ihn in urls.py. Docs hierquelle
Nur eine Anmerkung konnte ich in den obigen Antworten nicht finden. In diesem Code:
Was macht der dritte Parameter
context_instance
eigentlich? Als RequestContext wird ein grundlegender Kontext eingerichtet, der dann hinzugefügt wirduser_context
. Die Vorlage erhält also diesen erweiterten Kontext. Welche Variablen hinzugefügt werden, wirdTEMPLATE_CONTEXT_PROCESSORS
in settings.py angegeben. Zum Beispiel fügt django.contrib.auth.context_processors.auth Variablenuser
und Variablen hinzu, aufperm
die dann in der Vorlage zugegriffen werden kann .quelle