Передача словаря во все шаблоны с использованием 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 }}

Другие вопросы по тегам