2011-10-15 17 views
4

訪問使用上下文處理器鑑於全局變量假設我有一個上下文處理器:在Django

def title(request): 
    return {'titles': 'mytitle'} 

我可以在模板訪問此變量作爲{{ titles }}

但我怎麼能在視圖中這樣做呢?

def myview(request): 
    print request.titles 

似乎並沒有工作 - 'WSGIRequest' object has no attribute 'titles'


或者,也許有一個更好的方法(除上下文處理器)在兩個視圖和模板訪問的全局變量?

在此先感謝。

回答

2

上下文處理器不是全局變量。它們只是在啓動RequestContext時運行的函數,它將項目添加到該上下文中。所以只有你有RequestContext的地方,例如在模板中,它們纔可用。

你的例子並沒有真正給出你想要訪問的變量的一個好主意。如果它只是你想要在任何地方使用的常量,一個好的方法是將它們定義在中心位置,比如在settings.py中,並在需要的地方導入該模塊 - 再加上使用上下文處理器將它們添加到上下文中。

+1

非常感謝。以這種方式定義常量並使用上下文處理器將它們添加到上下文中是我所需要的。 – laszchamachla

7

將您的上下文處理器方法路徑(folder.context_processor.application_context)添加到TEMPLATE_CONTEXT_PROCESSORS。

在我的情況application_context

是我的文件context_processor.py 和方法「application_context」返回{「頭銜」:「mytitle」}中定義的方法,如果你想使用「標題」作爲全局變量

在視圖中這樣

global_var = RequestContext(request).get("app_config") 
titles = global_var.get("titles") 
print titles 

使用它唯一的優勢是「同一個變量‘標題’將是可見的模板,也可以在你的意見」

0

如果您需要在您的視圖中的數據,它的清潔使用Middlewa結合重新使用上下文處理器:

  1. 創建自定義瑣碎中間件一些數據存儲在請求對象上,在說request.xexample)。現在你可以直接在你的視圖中訪問它。
  2. 在您的TEMPLATE_CONTEXT_PROCESSORS中啓用django.core.context_processors.request以使request.x可以從您的模板訪問。

見我相關的問題:Django: How to provide context to all views (not templates)?