浅谈Django中的RequestContext和Context

分别对应的包是:django.template.Context和django.template.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中直接来使用。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值