前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django源码学习-16-TemplateResponse

Django源码学习-16-TemplateResponse

作者头像
小团子
发布2019-08-13 15:01:11
7470
发布2019-08-13 15:01:11
举报
文章被收录于专栏:数据云团数据云团

Django源码学习-15-SimpleTemplateResponse

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

TemplateResponse作为最终使用的类,除了在初始化方法中接收参数然后传递给SimpleTemplateResponse初始化方法之外,完全未重写SimpleTemplateResponse的其它方法。

继承链:

代码语言:javascript
复制
HttpResponse --> SimpleTemplateResponse --> TemplateResponse

① TemplateResponse 渲染

TemplateResponse在返回在客户端之前,已经渲染完成,渲染过程将模板和上下文结合转换为字节流。

代码语言:javascript
复制
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使用给定的请求,模板,上下文,内容类型,HTTP状态和字符集实例化对象。
代码语言:javascript
复制
TemplateResponse.init(request,template,context = None,content_type = None,status = None,charset = None,using = None)
  • 一个HttpRequest实例。
代码语言:javascript
复制
request

使用示例

代码语言:javascript
复制
from django.template.response import TemplateResponse

def index(request):
    return TemplateResponse(request, 'article_list.html', {'articles': Articles.objects.all()})
  • 依赖于后端的模板对象(例如返回的对象 get_template()),模板名称或模板名称列表。
代码语言:javascript
复制
template
  • dict 要添加到模板上下文的值的A。默认情况下,这是一个空字典。
代码语言:javascript
复制
context = None
  • HTTP Content-Type标头中包含的值,包括MIME类型规范和字符集编码。如果 content_type指定,则使用其值。否则, DEFAULT_CONTENT_TYPE使用。
代码语言:javascript
复制
content_type = None
  • 响应的HTTP状态代码。
代码语言:javascript
复制
status = None
  • 将对响应进行编码的字符集。如果没有给出,它将从中提取content_type,如果不成功,DEFAULT_CHARSET将使用该设置。
代码语言:javascript
复制
charset = None
  • 该NAME模板引擎的使用加载的模板。
代码语言:javascript
复制
using = None
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档