Django源码学习-15-SimpleTemplateResponse
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
TemplateResponse作为最终使用的类,除了在初始化方法中接收参数然后传递给SimpleTemplateResponse初始化方法之外,完全未重写SimpleTemplateResponse的其它方法。
继承链:
HttpResponse --> SimpleTemplateResponse --> TemplateResponse
① TemplateResponse 渲染
TemplateResponse在返回在客户端之前,已经渲染完成,渲染过程将模板和上下文结合转换为字节流。
class TemplateResponse(SimpleTemplateResponse):
rendering_attrs = SimpleTemplateResponse.rendering_attrs + ['_request']
def __init__(self, request, template, context=None, content_type=None,
status=None, charset=None, using=None):
super().__init__(template, context, content_type, status, charset, using)
self._request = request
以下三种情况,TemplateResponse被渲染 1. 显式调用 render() 方法 2. 显式调用 content 属性 3. 在穿过模板响应中间件之后,在穿过响应中间件之前
根据is_rendered属性的设置机制,一个TemplateResponse只能被渲染一次,不过当明确地为content属性赋值时,这些改变总会被应用。
如果想要强制重新渲染,就手动为content赋值。直接赋值不会调用render()方法会而触发检查is_rendered的逻辑,所以这样可以进行重新渲染。
方法
会发现 TemplateResponse 和 SimpleTemplateResponse 的方法很相似。
TemplateResponse.init(request,template,context = None,content_type = None,status = None,charset = None,using = None)
request
使用示例
from django.template.response import TemplateResponse
def index(request):
return TemplateResponse(request, 'article_list.html', {'articles': Articles.objects.all()})
template
context = None
content_type = None
status = None
charset = None
using = None