2011-10-04 83 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從那時起就已經發生了變化。 –