2010-11-14 86 views
7

如果每個網頁都有用戶新消息通知(新消息計數,如消息(1)),我如何將變量'{new_message_count:1}'傳遞給每個視圖 我想要使用中間件:django中間件設置用戶特殊全局變量

class page_variable(): 
def process_request(self, request): 
    # put the variable to the request or response so can used in template variable 
    return None 

和模板的樣子:

<a href="/message/">new <em>({{ new_message_count }})</em></a> 

回答

5

有已經內置messaging framework處理所有的這個要求。

但是,假設您確實想要推出自己的產品,則無法將事情從中間件傳遞到上下文中。您可以附加到request對象上,然後您可以在視圖或模板中使用該對象,或者添加一個上下文處理器,該處理器從請求中獲取變量並將其添加到上下文中。

+0

是的!這是我想要的,非常感謝,但如何將它附加到請求?我嘗試「request.new_message_count = 1」或「request ['new_message_count'] = 1」或「request .__ class __。new_message_count = 1」,但不起作用 – cloudzhou 2010-11-14 16:34:19

+0

你是什麼意思,它不起作用?第一個應該可以正常工作。 – 2010-11-14 16:41:47

+0

我在def process_request(self,request)中做到這一點:,但模板沒有獲得變量{{new_message_count}},我必須錯過一些東西。我將再次嘗試 – cloudzhou 2010-11-14 16:44:10

3

在Django的開發版本,你可以在呈現之前編輯從中間件模板背景:

class MessageCountMiddleware: 
    def process_template_response(self, request, response): 
     response.context['new_message_count'] = message_count(request.user) 

在Django的1.2,你可以創建自定義背景處理器:

def add_message_count(request): 
    return { 'new_message_count': message_count(request.user) } 

並註冊在設置中

TEMPLATE_CONTEXT_PROCESSORS += [ 'my_project.content_processors.add_message_count' ]