2010-11-14 31 views
7

si chaque page Web a un nouvel avis de message (nouveau compte de messages, comme message (1)), comment puis-je passer variable '{new_message_count: 1}' à chaque vue je veux à l'utilisation de middleware:django middleware set utilisateur spécial variable globale

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

et regarder comme modèle:

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

Répondre

5

Il y a déjà tout cela intégré messaging framework qui gère pour vous. Toutefois, en supposant que vous souhaitiez vraiment utiliser les vôtres, vous ne pouvez pas faire passer les choses du contexte du middleware. Vous pouvez le joindre à l'objet request, que vous pouvez ensuite utiliser dans votre vue ou votre modèle, ou ajouter un processeur de contexte qui prend la variable de la demande et l'ajoute dans le contexte.

+0

oui! C'est ce que je veux, merci beaucoup, mais comment l'attacher à la demande? j'essaye le "request.new_message_count = 1" ou "request ['nouveau_message_count'] = 1" ou "request .__ class __. nouveau_message_count = 1", mais ne fonctionne pas – cloudzhou

+0

Que voulez-vous dire, cela ne fonctionne pas? Le premier devrait fonctionner correctement. –

+0

Je le fais à def process_request (self, request):, mais le modèle n'obtient pas la variable {{new_message_count}}, je dois manquer quelque chose. Je vais essayer à nouveau – cloudzhou

3

Dans la version de développement de django, vous pouvez modifier le contexte modèle à partir d'un middleware avant de rendre:

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

Dans Django 1.2 vous pouvez créer un processeur de contexte personnalisé:

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

et l'enregistrer dans les paramètres

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