2010-11-14 5 views
7

wenn jede webseite hat eine benutzer neue nachricht kündigung (neue messung zählen, wie nachricht (1)), wie kann ich Variable '{new_message_count: 1}' zu jeder ansicht ich will zur Verwendung von Middleware:django middleware set benutzer spezielle globale variable

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

und Vorlage wie folgt aussehen:

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

Antwort

5

Es bereits ein eingebautes in messaging framework, die für Sie alle diese Griffe.

Aber vorausgesetzt, Sie möchten wirklich Ihre eigenen rollen, können Sie die Dinge nicht in den Kontext von Middleware übergeben. Sie kann an das Objekt request anhängen, das Sie dann in Ihrer Ansicht oder Vorlage verwenden können, oder fügen Sie einen Kontextprozessor hinzu, der die Variable aus der Anforderung übernimmt und sie in den Kontext einfügt.

+0

ja! das ist was ich will, vielen dank, aber wie man es an die Anfrage anhängen? Ich versuche "request.new_message_count = 1" oder "request ['new_message_count'] = 1" oder "request .__ class __. new_message_count = 1", aber funktioniert nicht – cloudzhou

+0

Was meinst du, es funktioniert nicht? Der erste sollte gut funktionieren. –

+0

Ich mache es bei def process_request (selbst, Anfrage):, aber die Vorlage nicht die Variable {{new_message_count}}, ich muss etwas verpassen. Ich werde es erneut versuchen – cloudzhou

3

In der Entwicklungsversion von django können Sie Template Kontext von einer Middleware bearbeiten vor dem Rendern:

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

und registrieren:

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

In Django 1.2 Sie einen benutzerdefinierten Kontextprozessor erstellen in den Einstellungen

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