Как передать общие словарные данные на каждую страницу в django
У меня есть общие данные (номер пользователя для входа в систему) для отображения на каждой странице. Я могу просто перейти к шаблону как
dict={'messagenumber':5}
return render_to_response('template.html',dict,context_instance=RequestContext(request))
Но это выглядит утомительно, если я передаю данные этого диктатора на самую страницу. Есть ли более простой способ передать общие данные на каждую страницу?
Спасибо
Ответы
Ответ 1
Меня отталкивает, как это распространено. Вы хотите использовать контекстные процессоры мой друг!
Очень легко создать, например:
def messagenumber_processor(request):
return {'messagenumber': 5}
Так как messagenumber - это динамическая переменная на основе User, вы можете извлекать данные из базы данных, выбирая из request.user
, поскольку у вас есть полный доступ к request
в каждом процессоре контекста.
Затем добавьте это в свой TEMPLATE_CONTEXT_PROCESSORS
в settings.py, и вы все настроены:-) Вы можете сделать любую форму операции с базой данных или другой логикой в процессоре контекста, попробуйте!
Ответ 2
Просто, чтобы сэкономить время, если новое для 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}}
Ответ 3
Напишите свою собственную функцию для ее обработки.
def render_with_message_number(template, message_number, request):
return render_to_response(template, dict(messagenumber=message_number),
context_instance=RequestContext(request))
И не тень dict
.