Django 上下文处理器

模板要在上下文中渲染。
上下文是django.template.Context的实例。django.template.RequestContext是Django提供的一个子类。
django.template.RequestContext默认为模板上下文添加很多变量。使用render()快捷方式时,如果没有明确传入其他上下文,默认使用RequesetContext。

django.template.Context的实例

from django.template import loader,
Context  def index(request):     ......    
t = loader.get_template("index.html")  # 手动加载模板     c = Context(         'app':'app01',         'user':request.user,         'id_addr':request.META['REMOTE_ADDR']         'message':'index view'          )  
# 构建上下文对象     return t.render(c)  # 渲染模板  def home(request):     ......    
t = loader.get_template("home.html")  # 手动加载模板     c = Context(         'app':'app01',         'user':request.user,         'id_addr':request.META['REMOTE_ADDR']         'message':'home view'          )  
# 构建上下文对象     return t.render(c)  # 渲染模板

django.template.RequestContext和上下文处理器就是为了处理变量重复的问题而出现的。上下文处理器用于指定自动在各个上下文中设定的变量。这样就不需要调用render()时都指定。

django.template.RequestContext的处理办法

使用上下文处理器的做法是创建处理器,将处理器传给RequestContext。

from django.template import loader, RequestContext  def custom_proc(request):     # 上下文处理器     return {        
"app01":"app01",         "user":request.user,        
"id_addr":request.META['REMOTE_ADDR']     } 
def index(request):     
......      t =
loader.get_template("index.html") 
# 手动加载模板      c = RequestContext(          request,          {'message':'index view'},          processors=[custom_proc])     return t.render(c)  def index(request):      ......      t = loader.get_template("home.html")  # 手动加载模板      c = RequestContext(          request,          {'message':'home view'},          processors=[custom_proc])     return t.render(c)

这是没有使用render()快捷方式,这样避免了在模板中自己手动调用loader.get_template(),创建上下文处理器。
还有个方法context_instance参数将进一步缩减代码。

使用context_instance参数

from django.shortcuts import render from
django.template import loader, RequestContext 
def custom_proc(request):     # 上下文处理器    
return {        
"app01":"app01",         "user":request.user,        
"id_addr":request.META['REMOTE_ADDR']     } 
def index(request):     
......      return render(          request,          {'message':'index view'},          context_instance=RequestContext(             
request,processors=[custom_proc]         
)     )  def index(request):      ......      return render(          request,          {'message':'home view'},         context_instance=RequestContext(             
request,processors=[custom_proc]         
)     )

全局上下文处理器

context_processors设置(在settings.py文件中)指明始终提供给RequestContext的上下文处理器。
context_processors的默认值如下:

'context_processors':[         'django.template.context_processors.debug',        
'django.template.context_processors.request',        
'django.contrib.context_processors.auth',        
'django.contrib.messages.context_processors.messages',     ],

这是个可调用的列表,接口与前文定义的custom_proc函数一样——参数是一个请求对象,返回值是一个字典。
注意:
context_processors中的值是字符串,因此处理器要在Python路径中。

Django 上下文处理器的更多相关文章

  1. django上下文处理器的基本使用

    1.定义一个方法 2.在django里面的settings.py里面修改配置文件 3.最后在模板里面调用 操做步骤如下: 这是在settings.py里面配置的文件   在模板里面调用上下文处理器

  2. django上下文处理器

    上下文处理器(context processors)上下文处理器是可以返回一些数据,在全局模板中都可以使用.比如登录后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每 ...

  3. Django 上下文管理器,为父模板添加动态数据

    1.摘要:模板继承可以减少页面内容的重复定义,实现页面内容的重用. 但是当父模板中有动态数据的话,这些动态数据在子模版中是不会显示的.我们可以通过自定义上下文处理器来解决 2.Django上下文处理器 ...

  4. Django - 请求与响应、表单、中间件、上下文处理器

    请求与响应篇 一.HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象.视图函数的第一个参数(request)是HttpRequest对象在djang ...

  5. Django 12 中间件、上下文处理器和admin后台

    Django 12 中间件.上下文处理器和admin后台 一.中间件 #Django中间件 (Middleware) # 一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改 ...

  6. Django框架基础知识12-中间件及上下文处理器

    Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...

  7. Django——12 中间件 上下文处理器 admin后台

    Django 中间件 中间件介绍 中间件的第一个例子 中间件的第二个例子 上下文处理器 admin后台管理   中间件 Django中间件(Middleware)是一个轻量级.底层的“插件”系统,可以 ...

  8. Django 上下文管理器的应用

    使用场景:模板继承可以减少页面内容的重复定义,实现页面内容的重用.个人博客右侧的导航栏都是继承base页面从而让代码得到最大程度的复用.但是当父模板中有动态数据的话,这些动态数据在子模版中是不会显示的 ...

  9. 141.内置上下文处理器debug、request、auth、messages、media、static、csrf

    上下文处理器 上下文处理器可以返回一些数据,在全局模板中都可以使用,比如登录后的用户数据,在很多页面中都需要使用,那么我们就可以方在上下文处理器中,就没有必要在每个视图中返回这个对象了. 在setti ...

随机推荐

  1. redis分页

    模仿的https://www.cnblogs.com/dee0912/p/4612183.html 第一步连接redis后进行添加数据 require_once '../redis/redis.php ...

  2. day 10函数二

    今日内容 '''实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合​*****形参:定义函数,在括号内声明的变量名,用来接受外界传来的值​'''​'''注:形参随着函数的调用 ...

  3. 如何判断app的页面是原生的还是H5的webview页面

    1.看布局边界(在手机侧观察) 开发者选项->显示布局边界,页面元素很多的情况下布局是一整块的是h5的,布局密密麻麻的是原生控件.页面有布局的是原生的,否则为h5页面.(仅针对安卓手机试用)如下 ...

  4. matlab读取cvs文件的几种方法

    matlab读取CVS文件的几种方法: 1,实用csvread()函数   csvread()函数有三种使用方法: 1.M = csvread('filename')2.M = csvread('fi ...

  5. .NET Core 开源工具 IPTools - 快速查询 IP 地理位置、经纬度信息

    快速查询IP信息,支持国内和国外IP信息查询,支持查询经纬度,地理位置最高支持到城市. 1. IPTools.China 快速查询中国IP地址信息,包含国家.省份.城市.和网络运营商.非中国IP只支持 ...

  6. 基于 HTML5 的 WebGL 3D 档案馆可视化管理系统

    前言 档案管理系统是通过建立统一的标准以规范整个文件管理,包括规范各业务系统的文件管理的完整的档案资源信息共享服务平台,主要实现档案流水化采集功能.为企事业单位的档案现代化管理,提供完整的解决方案,档 ...

  7. docker 在centos6 和centos7上的区别

    这些天研究了下docker,在centos6.6上装了个docker1.7.1,在centos7.6上装了个docker18.09.0 两者还是有区别的. 1.配置docker国内镜像加速  Dock ...

  8. 基于mybatis基本操作

    实体 在对上述三个实体操作中了解mybatis的实现 全部代码 pro1是另外的一个完整项目用spring和struts2 hibernate 下载  https://github.com/Danov ...

  9. 让linux启动更快的方法

    导读 进行 Linux 内核与固件开发的时候,往往需要多次的重启,会浪费大把的时间. 在所有我拥有或使用过的电脑中,启动最快的那台是 20 世纪 80 年代的电脑.在你把手从电源键移到键盘上的时候,B ...

  10. JAVA项目启动正常,无法访问

    若是一般项目web.xml问题  springboot是静态资源问题