Один из способов сделать это - написать простой пользовательский шаблонный процессор контекста . Это так же просто, как функция, которая принимает экземпляр HttpRequest
и возвращает словарь. В вашем случае словарь может содержать список привилегий для текущего пользователя.
Например,
# This is our processor.
def append_privileges(request):
privileges = get_privs(request.user)
return dict(privileges = privileges)
Где get_privs
- это метод, который возвращает словарь привилегий, как вы указали в своем вопросе.
Теперь добавьте этот процессор к настройке TEMPLATE_CONTEXT_PROCESSORS
в вашем settings.py
. Обычно этой переменной нет в настройках. При добавлении убедитесь, что вы скопировали существующего по умолчанию и , а затем добавили его Например,
TEMPLATE_CONTEXT_PROCESSORS = (
# copied from docs.
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.contrib.messages.context_processors.messages",
# appended custom value
"app.utils.append_privileges",
)
Наконец, в вашем базовом шаблоне ожидаем переменную privileges
.
# I've added a pprint to test. You'll obviously need to do more.
{{ privileges|pprint }}
Это гарантирует, что все ваши представления автоматически вернут контекст с правильной переменной privileges
.