`
lantian_123
  • 浏览: 1368706 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Django RequestContext

阅读更多
模版中的变量由context中的值来替换,如果在多个页面模版中含有相同的变量,比如:每个页面都需要{{user}},笨办法就是在每个页面的请求视图中都把user放到context中。
 
from django.temlate import loader,Context

t = loader.get_template('xx.html')
c = Context({'user':'zhangsan'})
return HttpResponse(t.render(c))   #httpresponse
 
也可以简写为:
 
from django.short_cuts import render_to_response
render_to_response('xxx.html',{'user':'zhangsan'})
 
但是这样写不好的地方是就是造成代码的冗余,不易维护,此时就可以用Context的一个子类:django.template.RequestContext,在渲染模版的时候就不需要Context,转而使用RequestContext。RequestConntext需要接受request和processors参数,processors是context处理器的列表集合。
context处理器
 
from django.template import RquestContext
def custom_pros(request):   #context处理器
     return {'age':22,'user':request.user}
 
#view 代码块
c = RequestContext(request,{'name':'zhang'},processors=[custom_pros])
return HttpResponse(t.render(c))  
 
这样在每个试图中只需把custom_pros传递给RequestContext的参数processors就行了。如果是render_to_response与RequestContext结合使用,那么render_to_response接收参数context_instance.
 
render_to_response('xxx.html',{'name':'zhang'},context_instance=RequestContext(request,processors[custom_pros])
 
但是这样还是很麻烦,代码的冗余并没有真正解决,你不得不在试图函数中明确指定context处理器,为此,Django提供了全局的context处理器。
 
全局context处理器
 
默认情况下,Django采用参数TEMPLATE_CONTEXT_PROCESSORS指定默认处理器,意味着只要是调用的RequestContext,那么默认处理器中返回的对象都就将存储在context中。
 
template_context_processors默认在settings文件中是没有的,而是设置在global_settings.py文件中,如果想加上自己的context处理器,就必须在自己的settings.py中显示的指出参数:TEMPLATE_CONTEXT_PROCESSORS
默认:
 
TEMPLATE_CONTEXT_PROCESSORS = (
           'django.contrib.auth.context_processors.auth',#django1.4  or after
           'django.core.context_processors.auth',  #django1.4 before
           'django.core.context_processors.debug', 
           'django.core.context_processors.i18n', 
           'django.core.context_processors.media',
           'myapp.processor.foos',
)
 
或者是:
 

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS +("myapp.processor.foos",)
此时,在试图中只要把request参数传递给RquestContext就ok了。

render_to_response('xxx.html',{'age':33},context_instance=RequestContext(request))
系统在接受到该视图的请求时,自动执行处理器 “myapp.processor.foos",并把其返回值渲染到模版中。
参考:

 

1
3
分享到:
评论
2 楼 thc1987 2013-05-23  
被解救的姜戈
1 楼 jerry1985 2013-05-22  
django 姜戈?

相关推荐

    Django中文版 教程.

    11. 高级模板技术和对象的通用视图:这部分内容包括模板语言回顾、RequestContext的使用、上下文处理器的创建、模板标签和过滤器的自定义以及通用视图的使用。 12. 用户身份验证和权限管理:教程详细讲解了如何在...

    《The Django Book 中文版》PDF

    - **RequestContext和Context处理器**:Django提供了一种自动填充上下文的方法,即使用RequestContext,还可以通过Context处理器自定义添加全局可用的变量。 - **Context处理器示例**:例如`django.core.context_...

    The Django Book(chinese).pdf

    在最后一章,作者探讨了Django模板引擎的内部机制,包括RequestContext和Context处理器,以及如何编写自定义的Context处理器。同时,还介绍了如何扩展模板系统,如何创建自定义模板过滤器和标签,并且提供了使用内置...

    django中CSRF的问题及解决

    **确保视图函数使用`RequestContext`**:在渲染模板时,应使用`RequestContext`而不是普通的`Context`对象。 2. **使用`{% csrf_token %}`标签**:在每个内部URL的POST表单中包含该模板标签。 3. **启用CSRF保护*...

    django book

    ### Django Book 知识点概览 #### 一、Django 概述 - **什么是 Web 框架** - Web 框架是一种软件框架,用于支持 Web 应用程序的快速开发。它提供了一种结构化的、可重用的方式来进行应用程序的设计和实现。 - **...

    python+django加载静态网页模板解析.docx

    from django.template import RequestContext def index(request): return render(request, 'index.html') ``` - 对于Django 1.x版本,代码如下: ```python from django.shortcuts import render_to_...

    django PDF格式

    同时,对模板引擎的深入探讨,包括 RequestContext 的使用、Context 处理器以及如何优化模板性能,为开发者提供了更深层次的理解。 综上所述,Django 1.4 版本 PDF 教程不仅涵盖了 Django 的基础知识,还深入讲解了...

    The Django Book.pdf

    - **RequestContext和Context处理器**:RequestContext是一种特殊的Context类,可以自动添加一些全局变量到模板中。 - **django.core.context_processors.auth**:提供与用户认证相关的上下文变量。 - **django.core...

    对django中render()与render_to_response()的区别详解

    render()与render_to_response()均是django中用来显示模板页面的,但是在django1.3之后,render()便比render_to_response()更加招人待见!最明显的就是前者会自动使用RequestContext,而后者需要coding进去, 例如:...

    解决Django模板无法使用perms变量问题的方法

    from django.template import RequestContext def view1(request): if request.user.has_perm('app_name.view_model_name'): content = "您有权限访问此页面" else: content = "您没有权限访问此页面" return ...

    详解Django框架中用context来解析模板的方法

    本文将深入探讨如何利用context来解析模板,并介绍Django中的RequestContext及其优化方式——context处理器。 首先,一个基本的视图函数通常会创建一个`django.template.Context`实例,并将数据放入其中,然后通过`...

    详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击

    如果使用`render_to_response`函数,记得传递`RequestContext(request)`,以便将CSRF令牌注入到模板上下文中。 **二、前端处理** 前端JavaScript代码中,对于所有AJAX请求,你需要确保CSRF令牌被正确地附带在请求...

    Django框架模板文件使用及模板文件加载顺序分析

    from django.template import loader, RequestContext from django.http import HttpResponse def my_render(request, template_path, context={}): # 1. 加载模板文件,获取一个模板对象 temp = loader.get_...

    详解Python的Django框架中的templates设置

    这些是用于填充`RequestContext`的上下文处理器,它们接受请求对象并返回一个字典,字典中的键值会被添加到模板渲染的上下文中。 - `DEBUG`:在Django 1.8后被弃用,现在应该在`DjangoTemplates`的`OPTIONS`中设置`...

    python Django框架实现自定义表单提交

    对于GET请求,我们使用`context_instance=RequestContext(request)`将CSRF上下文处理器添加到模板上下文中,这是Django 1.x的写法。在Django 2.x及更高版本中,可以简化为`request.context_data`或直接在`render()`...

    Django ImageFiled上传照片并显示的方法

    from django.template import RequestContext from django.http import HttpResponse from forms import ImgForm @csrf_exempt def add(request): if request.method == 'POST': form = ImgForm(request.POST, ...

    Django表单提交后实现获取相同name的不同value值

    from django.template.context import RequestContext from django.template.response import render_to_response def setting(request): if request.method == 'POST': result_list = request.POST.getlist('key...

Global site tag (gtag.js) - Google Analytics