2013-06-22 52 views
0

我有一個看法,以選擇render_to_response:添加環境中使用裝飾

@add_value 
my_view(request): 
    render_to_response('template.html', {'var1' : 'value'}) 

和裝飾:

def add_value(): 

    def decorator(view_func): 
     def _decorator(request, *args, **kwargs): 
      response = view_func(request, *args, **kwargs) 
      #what code can I put in here to add { 'var2' : 'value' } to render_to_response context? 

我想裝飾添加一個密鑰對,所以最終選擇render_to_response將成爲以下:

render_to_response('template.html', {'var1 : 'value', 'var2' : 'value'}) 

有人知道如何做到這一點?

+0

您不能使用該視圖代碼,因爲在函數返回時渲染已完成。你可以返回一個['TemplateResponse'](https://docs.djangoproject.com/en/dev/ref/template-response/),這將允許你改變上下文,但你可能會更好正如Bernhard的回答所暗示的那樣,使用上下文處理器。 – Aya

回答

4

這是不可能的,因爲視圖已經返回一個現成的HttpResponse對象。但是,如果你想要的東西添加到多個視圖的背景下,context processor可能是你在找什麼:

def add_value_context_processor(request): 
    return {'var': value} 

而且它在你的settings.py添加到TEMPLATE_CONTEXT_PROCESSORS