2011-10-04 85 views
2

Django RequestContext是否有办法获取它所关联的HttpRequest对象?它是否有像get_request()之类的方法来获取传入构造函数的request?我需要从我只收到RequestContext的方法中引用它。从RequestContext获取当前请求?

+0

有点迟到了,这附带了我刚刚进入Django的免责声明,但是当你传递的字典参数'RequestContext'你可能会添加'request':request',然后使用context.get('request')检索它。它感觉不太对,它需要你改变你的观点来传递它,但如果你确实需要它,你可以做到这一点。另外,如果您找到另一种(更好的)方式,请更新。 :) – mway

回答

9

'django.core.context_processors.request'设置为TEMPLATE_CONTEXT_PROCESSORS设置。并得到请求,其中上下文可用使用:

request = context['request'] 
+0

谢谢! (我需要输入15个字符:p) –

0

否,django.template.RequestContext(其居住在django/template/context.py)不存储到请求对象的任何参考:

class RequestContext(Context): 
    """ 
    This subclass of template.Context automatically populates itself using 
    the processors defined in TEMPLATE_CONTEXT_PROCESSORS. 
    Additional processors can be specified as a list of callables 
    using the "processors" keyword argument. 
    """ 
    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)) 

如果Django的被修补以包括在构造简单的线是这样的:

self.request = request 

和函数的定义是这样的:

def get_request(self): 
    return self.request 

然后我们会做生意。不幸的是,我们不是,所以答案是“不,你不能得到与RequestContext相关联的请求对象。”

+0

仅供2014年偶然发现的读者,像我:汉森的答案是正确的,接受的答案是错误的。只需将django.core.context_processors.request添加到TEMPLATE_CONTEXT_PROCESSORS即可。 – Bunkerbewohner

+0

@Bunkerbewohner我会接受他的回答,因为我的过时了。这个问题最初是在2011年提出的,Django从那时起就已经发生了变化。 –