2016-08-08 10 views
0

Was ist der Unterschied zwischenDjango TemplateResponse vs machen

return TemplateResponse(request, self.template_name, context=context) 

und

return render(request, self.template_name, context=context) 

Gibt es ein Szenario, warum ich einen von ihnen und den anderen nicht verwenden sollten?

Antwort

9

Ein TemplateResponse verzögert das Rendern der Vorlage, bis die Ansicht beendet ist. Dies ermöglicht, dass template response middleware in der Antwort ausgeführt wird und möglicherweise die Vorlage oder die Kontextdaten vor dem Rendern der Vorlage ändert. Nachdem die Vorlagenantwort-Middleware ausgeführt wurde, wird die Vorlage gerendert, und die normale Antwort-Middleware wird auf dem gerenderten Inhalt ausgeführt, bevor die Antwort an den Client zurückgegeben wird.

Die Verknüpfung render() gibt die Vorlage sofort wieder und gibt eine HttpResponse zurück.

+0

Für mehr: https://docs.djangoproject.com/en/1.9/ref/template-response/#the-rendering-process – souldeux

+0

Es ist auch nützlich für mehr als nur Middleware. Sie könnten beispielsweise einen Dekorator haben, der den Kontext einer Ansicht oder einen Testfall ändert, der nach der richtigen Vorlagendatei sucht. –