浅谈Django中的RequestContext和Context
2013-12-30 17:00
543 查看
分别对应的包是:django.template.Context和django.template.RequestContext.
1.RequestContext在初始化的时候比Context多带了一个参数request,查阅源码可以知道request是为context processor准备的。
2.从RequestContext的构造函数可以看出,我们可以通过processors参数传递context processor,这样我们可以灵活使用context processor。如果希望作用于所有的view,那么则可以在settings的TEMPLATE_CONTEXT_PROCESSORS设置,如果希望作用于特定的view,则可以在初始化一个RequestContext的时候,赋值给processors。同时,该参数是可选的,是一个包含context处理器参数的列表或者元组。
3.在使用render_to_response,render_to_string等shortcut的时候,可以附带context_instance参数来使用RequestContext:
1.RequestContext在初始化的时候比Context多带了一个参数request,查阅源码可以知道request是为context processor准备的。
django/template/context.py def get_standard_processors(): from django.conf import settings global _standard_context_processors if _standard_context_processors is None: processors = [] collect = [] collect.extend(_builtin_context_processors) collect.extend(settings.TEMPLATE_CONTEXT_PROCESSORS)执行这些context processor,更新RequestContext,再render给模板:
class RequestContext(Context): def __init__(self, request, dict=None, processors=None, current_app=None, use_l10n=None): Context.__init__(self, dict, current_app=current_app, use_l10n=use_l10n) if processors is None: processors = () else: processors = tuple(processors) for processor in get_standard_processors() + processors: self.update(processor(request))
2.从RequestContext的构造函数可以看出,我们可以通过processors参数传递context processor,这样我们可以灵活使用context processor。如果希望作用于所有的view,那么则可以在settings的TEMPLATE_CONTEXT_PROCESSORS设置,如果希望作用于特定的view,则可以在初始化一个RequestContext的时候,赋值给processors。同时,该参数是可选的,是一个包含context处理器参数的列表或者元组。
3.在使用render_to_response,render_to_string等shortcut的时候,可以附带context_instance参数来使用RequestContext:
def some_view(request): # ... return render_to_response('my_template.html', my_data_dictionary, context_instance=RequestContext(request))或者
def view(request): #... return render_to_response('template1.html', {'message':'I am the view.'}, context_instance=RequestContext(request,processors=[custom_proc]))其中custom_proc为自定义变量的视图,当然也可以在TEMPLATE_CONEXT_PROCESSORS中直接定义一个可调用的函数元组,然后在processors中直接来使用。
相关文章推荐
- Django的Context和RequestContext
- Django RequestContext和Context处理器
- Django的Context和RequestContext
- 【Spring】浅谈ContextLoaderListener
- 浅谈Android里的Context的使用
- 详解Django框架中用context来解析模板的方法
- 浅谈Python的Django框架中的缓存控制
- 浅谈Python的Django框架中的缓存控制
- 浅谈django orm 优化
- django里Context_processor简述
- django template 基础(模板对象(Template),上下文对象(Context))
- 小博老师浅谈Context(一)
- 浅谈django的信号机制 Signals
- 浅谈Django(1)简介和安装
- 浅谈django中的认证与登录
- django在Shell中运行test中的Client返回的context 为空的解决
- Django 浅谈根据配置生成SQL语句的问题
- Django template context processors
- 浅谈Spring的 context:property-placeholder
- 浅谈ContextLoaderListener