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. python3 random模块

    import random '''随机获取从0-1之间的小数'''print(random.random())print(format(random.random(), ".2f" ...

  2. 使用Jasypt对SpringBoot配置文件加密(转)

    文章转自   https://www.jianshu.com/p/323ec96c46d2 引入jasypt <dependency> <groupId>com.github. ...

  3. echarts中饼图显示百分比

    通过echarts制作饼图,需要通过鼠标移动到对应的扇形才能才看数值和百分比. 解决这个问题参考的是将鼠标移动到扇形上的显示方法:     tooltip : {         trigger: ' ...

  4. System.Threading.Timer如何正确地被Dispose

    System.Threading.Timer是.NET中一个定时触发事件处理方法的类(本文后面简称Timer),它背后依靠的是.NET的线程池(ThreadPool),所以当Timer在短时间内触发了 ...

  5. 微软是如何重写C#编译器并使它开源的

    译者:王亮作者:Mads Torgersen (C# Language PM at Microsoft)原文:http://t.cn/EPOG96O 译者的一些话: 看了大家的评论,有园友说我翻译的不 ...

  6. Do You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板

    Scaffolding Template Intro 我们知道在Asp.Net MVC中,如果你使用的EF的DBContext的话,你可以在vs中通过右键解决方案-添加控制器-添加包含视图的控制器,然 ...

  7. 二十九、layui分页插件的使用

    <div id="page1"></div> <script> //开启分页 var page = 1; function findstoreL ...

  8. php_network_getaddresses: getaddrinfo failed 原因

    一般在调用外部服务请求时候,有时由于配置问题无法访问,phph会报一个php_network_getaddresses: getaddrinfo failed: Name or servicenot ...

  9. python之路5-函数

    定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 def hello(): print(& ...

  10. 在js中绑定onclick事件为什么不加括号,在html代码中必须要加?

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...