2010-11-14 9 views
7

se ogni pagina web ha un nuovo avviso messaggio utente (nuovo conteggio messaggio, come messaggio (1)), come posso passare variabile '{new_message_count: 1}' ad ogni vista voglio all'utilizzo di middleware:django middleware set variabile globale speciale utente

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

e modello di apparire come:

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

risposta

5

C'è già un built-in messaging framework che gestisce tutto questo per voi.

Tuttavia, supponendo che si desideri veramente eseguire il rollover, non è possibile passare le cose nel contesto dal middleware. È possibile aggiungere all'oggetto request, che è possibile utilizzare nella vista o modello o aggiungere un processore di contesto che prende la variabile dalla richiesta e la aggiunge al contesto.

+0

sì! questo è quello che voglio, molte grazie, ma come collegarlo alla richiesta? provo il "request.new_message_count = 1" o "request ['new_message_count'] = 1" o "request .__ class __. new_message_count = 1", ma non funzionano – cloudzhou

+0

Cosa vuoi dire, non funziona? Il primo dovrebbe funzionare bene. –

+0

lo faccio a def process_request (self, request):, ma il template non ottiene la variabile {{new_message_count}}, mi manca qualcosa. proverò di nuovo – cloudzhou

3

Nella versione di sviluppo di Django, è possibile modificare contesto modello da un middleware prima del rendering:

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

In Django 1.2 è possibile creare un processore contesto personalizzato:

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

e registrarlo nelle impostazioni

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