天天看點

Django源碼學習-15-SimpleTemplateResponse

Django源码学习-14-JsonResponse

Django源碼學習-15-SimpleTemplateResponse

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

TemplateResponse提供了一种方法。与基本HttpResponse对象不同 ,TemplateResponse对象保留视图提供的模板和上下文的详细信息以计算响应。在响应过程中稍后需要时,不会计算响应的最终输出。

继承链:

HttpResponse --> SimpleTemplateResponse --> TemplateResponse           

复制

Django源碼學習-15-SimpleTemplateResponse

① SimpleTemplateResponse 对象

Django源碼學習-15-SimpleTemplateResponse

属性

  • SimpleTemplateResponse.template_name

要呈现的模板的名称。接受依赖于后端的模板对象(例如返回的对象 get_template()),模板名称或模板名称列表。

['index.html, 'path/to/header.html']           

复制

Django源碼學習-15-SimpleTemplateResponse
  • SimpleTemplateResponse.context_data

呈现模板时要使用的上下文数据。它必须是一个 dict。

{'number': 123}           

复制

  • SimpleTemplateResponse.rendered_content

使用当前模板和上下文数据的响应当前呈现值内容。

  • SimpleTemplateResponse.is_rendered

一个布尔值,指示是否已呈现响应内容。

方法

  • 参数的含义与 HttpResponse 相同。
__init__(template, context=None, content_type=None, status=None, charset=None, using=None)           

复制

  • 处理上下文,接收dict类型的上下文内容,默认返回同样的dict,重写用以实现对上下文做额外的处理。
resolve_context(context)           

复制

  • 接收由(get_template()返回的)后台相关的模板对象,模板名字,或者多个模板名字组成的列表。
resolve_template(template)           

复制

Django源碼學習-15-SimpleTemplateResponse
  • 添加渲染完成后的回调函数,如果该方法运行时渲染已完成,回调函数会被立即调用。
add_post_render_callback()           

复制

  • 检查is_rendered,调用rendered_content属性,启动渲染,将实例的content属性设置为rendered_content的内容,调用回调函数(如果有),返回最终响应。该方法仅仅在初次被调用时生效:首先检查is_rendered,为False才会进行渲染,当渲染后会将is_renderd置为True。
render()           

复制

Django源碼學習-15-SimpleTemplateResponse

TemplateResponse可以用在任何HttpResponse可以使用的地方

from django.template.response import TemplateResponse

def index(request):
    return TemplateResponse(request, 'article_list.html', {'articles': Articles.objects.all()})           

复制