Как передать данные общего словаря на каждую страницу в Django - PullRequest
18 голосов
/ 11 июля 2010

У меня есть общие данные (номер сообщения вошедшего в систему пользователя) для отображения на каждой странице. Я могу просто перейти к шаблону как

dict={'messagenumber':5}
return render_to_response('template.html',dict,context_instance=RequestContext(request))

Но выглядит утомительно, если у меня есть эти данные, передаваемые на самой странице. Существует ли более простой способ передачи общих данных на каждую страницу?

Спасибо

Ответы [ 3 ]

17 голосов
/ 11 июля 2010

Меня поражает, насколько это часто встречается. Вы хотите использовать контекстные процессоры мой друг!

Очень легко создать, вот так:

def messagenumber_processor(request):
   return {'messagenumber': 5}

Поскольку messagenumber является динамической переменной, основанной на пользователе, вы можете извлекать данные из базы данных, выбирая из request.user, поскольку у вас есть полный доступ к request в каждом процессоре контекста.

Затем добавьте это к своему TEMPLATE_CONTEXT_PROCESSORS в файле settings.py, и все готово :-) Вы также можете выполнять любые операции с базой данных или другую логику в процессоре контекста, попробуйте это из!

17 голосов
/ 11 мая 2011

Просто чтобы сэкономить время, если вы новичок в Django

settings.py

TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages",
"home.context_processor.remote_ip")

в домашнем приложении создайте файл python с именем context_processor.py

в context_processor.py добавьте такую ​​функцию:

def remote_ip(request):
  return {'remote_ip': request.META['REMOTE_ADDR']}

используйте его в шаблонах, таких как {{remote_ip}}

0 голосов
/ 11 июля 2010

Напишите свою собственную функцию, чтобы справиться с этим.

def render_with_message_number(template, message_number, request):
    return render_to_response(template, dict(messagenumber=message_number),
        context_instance=RequestContext(request))

И не тени dict.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...