Django TemplateResponse与render的区别

22

什么是两者之间的区别?

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

并且

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

有没有任何情况,我应该使用其中之一而不是另一个?


还可以参考 render 文档。 - djvg
1个回答

33
一个TemplateResponse会延迟模板的渲染直到视图完成。这使得任何模板响应中间件都可以在响应上运行,并且可能在模板渲染之前更改模板或上下文数据。在模板响应中间件运行后,模板被渲染,并且正常的响应中间件在返回响应给客户端之前对渲染内容运行。 render()捷径会立即渲染模板并返回一个HttpResponse

更多信息请参见:https://docs.djangoproject.com/en/1.9/ref/template-response/#the-rendering-process - souldeux
它不仅仅对中间件有用,还可以用于其他方面。例如,您可以编写一个修饰器来修改视图上下文或测试用例以检查正确的模板文件。 - King_llama
1
我可能漏掉了什么,但感觉模板响应应该是默认的,而渲染应该保留给低级工作,比如在中间件不涉及时渲染电子邮件。这样,中间件就总能够挂钩。 - mlissner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接