промежуточное ПО django устанавливает специальную глобальную переменную пользователя - PullRequest
7 голосов
/ 14 ноября 2010

если на каждой веб-странице есть уведомление о новом сообщении для пользователя (количество новых сообщений, например message (1)), как я могу передать переменную '{new_message_count: 1}' в каждое представление, которое я хочу использовать с использованием промежуточного программного обеспечения:

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>

Ответы [ 2 ]

5 голосов
/ 14 ноября 2010

Уже есть встроенная структура обмена сообщениями , которая обрабатывает все это для вас.

Однако, если вы действительно хотите свернуть свои собственные, вы не можете передать их вконтекст из промежуточного программного обеспечения.Вы можете присоединить его к объекту request, который затем можете использовать в своем представлении или шаблоне, или добавить контекстный процессор, который берет переменную из запроса и добавляет ее в контекст.

3 голосов
/ 17 февраля 2011

В разрабатываемой версии 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' ]
...