Передача словаря во все шаблоны с использованием context_processors
Я хочу показать свое уведомление всем моим шаблонам. В моих настройках у меня есть:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'helpers.views.notifications' ,
],
},
},
]
хелперы /views.py
def notifications():
notifications = {'A':'aaa' , 'B':'bbb' }
return {'notifications': notifications }
Я ничего не получаю в своем шаблоне - что я делаю не так? в шаблоне:
{{notifications.A}}
1 ответ
Решение
Ваш TEMPLATES
настройка выглядит нормально. В вашем контекстном процессоре вам не нужно использовать RequestContext
, Просто верните словарь. Если вы используете Django 1.9 или более раннюю версию, вы должны вызвать метод request.user.is_authenticated()
иначе request.user.is_authenticated
всегда будет оцениваться как True.
def notifications(request):
if request.user.is_authenticated(): # Use request.user.is_authenticated for Django >= 1.10
notifications = {'default: 'logged in', ... }
else:
notifications = {'default':'not logged in', ...}
return {'notifications': notifications }
Тогда в вашем шаблоне вы можете получить доступ {{ notifications.default }}