专栏首页数据云团Django源码学习-12-ContextMixin 上下文

Django源码学习-12-ContextMixin 上下文

Django源码学习-11-base.py

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

ContextMixin:直接就是一个 get_context_data,用于返回context数据。

django.views.generic.base.ContextMixin

属性

extra_context

指定一些简单上下文的便捷方式 as_view()。用法示例:

from django.views.generic import TemplateView

TemplateView.as_view(extra_context={'title': 'Article Title'})

方法

get_context_data(** kwargs) 返回表示模板上下文的字典。提供的关键字参数将构成返回的上下文。用法示例:

import random

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['number'] = random.randrange(1, 50)
    return context

Mixin 提供数据,View 提供模板和渲染。所以一般get_context_data在Mixin中,get(),post(),head()在View中。

View:会调用所有的get方法,post方法,具体是这些['get', 'post', 'put', 'delete', 'head', 'options', 'trace'],View中是没有返回一个response的,所以光继承View的话,必须要重写get等,以返回一个response。

TemplateResponseMixin:这个Mixin会加入Template的基本信息,也就是template。但是光有Template信息是没有用的,因为没有跟View联系起来,如果想要跟View联系起来的话必须想办法把render_to_response插进方法的解析顺序的调用顺序,而且TemplateResponseMixin是没有context的信息。

Django中Mixin和View把原来的视图函数中的三个东西分开了,模板(TemplateResponseMixin),上下文数据(ContextMixin),负责将这些联系起来的(View)。

TemplateView:TemplateView继承自TemplateResponseMixin,ContextMixin以及View,所以它的调用思路就很明确了,在其中定义一个get方法,然后通过get方法去将上面的三个东西联系在一起。TemplateView的源代码:

本文分享自微信公众号 - 数据云团(SmartData),作者:云团小楠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django源码学习-8-ListView 通用视图-续

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

    小团子
  • Django实战-后台管理框架Xadmin

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

    小团子
  • Python-数据挖掘-urllib库

    urllib 库是 Python 内置的 HTTP 请求库,它可以看作处理 URL 的组件集合。

    小团子
  • 06. Web大前端时代之:HTML5+CSS3入门系列~HTML5 画布(上)

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 点击原文,查看笔...

    逸鹏
  • 微信小程序开发实战(17):用画布画一张笑脸

    小程序的画布允许绘制基础的图形,如直线、圆等。画布需要使用<canvas>标签,例如,下面的布局代码使用了<canvas>标签定义了一个300*200的画布。

    蒙娜丽宁
  • 沉睡中的大学生:你不失业,天理难容

    当你看到这个标题的时候,可能会觉得我是个标题党吧,但是首先澄清下,我不是标题党,我也不做标题党,从某种程度上说,我有些时候也是深受其害的。 ...

    compassblog
  • Go实现海量日志收集系统(三)

    coders
  • linux下僵尸进程的发现与处理

    当子进程退出时,父进程没有调用wait函数或者waitpid()函数等待子进程结束,又没有显式忽略SIGCHLD信号,那么它将一直保持在僵尸状态,如果这时父进程...

    py3study
  • Canvas基础积累

    这代码显示的结果,其实不是我们想的那样,其实还是存在一些问题,因fill()上方的路径状态还是存在有效的,所以为了解决这个问题,引入了beginPath()和c...

    迹_Jason
  • 停课不停学!深圳罗湖联手腾讯教育打造多元化防疫解决方案

    ? 2月17日,深圳市中小学“在线开学”。为做好防疫期间中小学“停课不停教 停课不停学”的工作,秉承“全区统筹,推荐平台,学校组织,年级授课,班级管理,精准施...

    鹅老师

扫码关注云+社区

领取腾讯云代金券