2010-11-14 18 views
7

si cada página web tiene un nuevo aviso de usuario (nuevo conteo de mensajes, como mensaje (1)), ¿cómo puedo pasar variable '{new_message_count: 1}' a cada vista quiero a la utilización de middleware:django middleware conjunto usuario variable global especial

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

y la plantilla de aspecto:

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

Respuesta

5

ya hay un built-in messaging framework que se encarga de todo esto para usted.

Sin embargo, suponiendo que realmente quiera hacer su propia versión, no puede pasar cosas al contexto desde middleware. Puede puede adjuntarlo al objeto request, que luego puede usar en su vista o plantilla, o agregar un procesador de contexto que toma la variable de la solicitud y la agrega al contexto.

+0

sí! eso es lo que quiero, muchas gracias, pero ¿cómo adjuntarlo a la solicitud? intento el "request.new_message_count = 1" o "request ['new_message_count'] = 1" o "request .__ class __. new_message_count = 1", pero no funciona – cloudzhou

+0

¿Qué quiere decir con que no funciona? El primero debería funcionar bien. –

+0

lo hago en def process_request (self, request):, pero la plantilla no obtiene la variable {{new_message_count}}, debo perder algo. Lo intentaré de nuevo – cloudzhou

3

En la versión de desarrollo de Django, puede editar contexto de la plantilla de un middleware antes de renderizar:

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

En Django 1.2 puede crear un procesador de contexto personalizado:

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

y registrarlo en la configuración

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