模版中的变量由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",并把其返回值渲染到模版中。
参考:
相关推荐
11. 高级模板技术和对象的通用视图:这部分内容包括模板语言回顾、RequestContext的使用、上下文处理器的创建、模板标签和过滤器的自定义以及通用视图的使用。 12. 用户身份验证和权限管理:教程详细讲解了如何在...
- **RequestContext和Context处理器**:Django提供了一种自动填充上下文的方法,即使用RequestContext,还可以通过Context处理器自定义添加全局可用的变量。 - **Context处理器示例**:例如`django.core.context_...
在最后一章,作者探讨了Django模板引擎的内部机制,包括RequestContext和Context处理器,以及如何编写自定义的Context处理器。同时,还介绍了如何扩展模板系统,如何创建自定义模板过滤器和标签,并且提供了使用内置...
**确保视图函数使用`RequestContext`**:在渲染模板时,应使用`RequestContext`而不是普通的`Context`对象。 2. **使用`{% csrf_token %}`标签**:在每个内部URL的POST表单中包含该模板标签。 3. **启用CSRF保护*...
### Django Book 知识点概览 #### 一、Django 概述 - **什么是 Web 框架** - Web 框架是一种软件框架,用于支持 Web 应用程序的快速开发。它提供了一种结构化的、可重用的方式来进行应用程序的设计和实现。 - **...
from django.template import RequestContext def index(request): return render(request, 'index.html') ``` - 对于Django 1.x版本,代码如下: ```python from django.shortcuts import render_to_...
同时,对模板引擎的深入探讨,包括 RequestContext 的使用、Context 处理器以及如何优化模板性能,为开发者提供了更深层次的理解。 综上所述,Django 1.4 版本 PDF 教程不仅涵盖了 Django 的基础知识,还深入讲解了...
- **RequestContext和Context处理器**:RequestContext是一种特殊的Context类,可以自动添加一些全局变量到模板中。 - **django.core.context_processors.auth**:提供与用户认证相关的上下文变量。 - **django.core...
render()与render_to_response()均是django中用来显示模板页面的,但是在django1.3之后,render()便比render_to_response()更加招人待见!最明显的就是前者会自动使用RequestContext,而后者需要coding进去, 例如:...
from django.template import RequestContext def view1(request): if request.user.has_perm('app_name.view_model_name'): content = "您有权限访问此页面" else: content = "您没有权限访问此页面" return ...
本文将深入探讨如何利用context来解析模板,并介绍Django中的RequestContext及其优化方式——context处理器。 首先,一个基本的视图函数通常会创建一个`django.template.Context`实例,并将数据放入其中,然后通过`...
如果使用`render_to_response`函数,记得传递`RequestContext(request)`,以便将CSRF令牌注入到模板上下文中。 **二、前端处理** 前端JavaScript代码中,对于所有AJAX请求,你需要确保CSRF令牌被正确地附带在请求...
from django.template import loader, RequestContext from django.http import HttpResponse def my_render(request, template_path, context={}): # 1. 加载模板文件,获取一个模板对象 temp = loader.get_...
这些是用于填充`RequestContext`的上下文处理器,它们接受请求对象并返回一个字典,字典中的键值会被添加到模板渲染的上下文中。 - `DEBUG`:在Django 1.8后被弃用,现在应该在`DjangoTemplates`的`OPTIONS`中设置`...
对于GET请求,我们使用`context_instance=RequestContext(request)`将CSRF上下文处理器添加到模板上下文中,这是Django 1.x的写法。在Django 2.x及更高版本中,可以简化为`request.context_data`或直接在`render()`...
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, ...
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...