diff --git a/lpon_site/frontend/context_processors.py b/lpon_site/frontend/context_processors.py new file mode 100644 index 0000000..fad99be --- /dev/null +++ b/lpon_site/frontend/context_processors.py @@ -0,0 +1,27 @@ +from django.conf import settings +from django.http import HttpRequest + + +def is_debug(request: HttpRequest) -> dict: + """ + Контекст-процессор Django. + + ЗАЧЕМ ЭТО НУЖНО: + Автоматически добавляет флаг режима отладки во ВСЕ шаблоны проекта, + без необходимости передавать его вручную в контексте каждой вьюхе. + Контекстный-процессор необходимо зарегистрировать в settings.py: + TEMPLATES['OPTIONS']['context_processors'] + + ПОЧЕМУ НЕ штатный django.template.context_processors.debug: + Штатный context-processor отдаёт переменную `debug` только если + ОДНОВРЕМЕННО: settings.DEBUG == True И IP клиента входит в + settings.INTERNAL_IPS (сверяется по request.META['REMOTE_ADDR']). + В проекте с Docker/reverse-proxy — REMOTE_ADDR может быть не 127.0.0.1, + а IP шлюза docker-сети, и потому штатный контекстный-процессор ненадёжен. + + :return + dict: словарь с единственным ключом IS_DEBUG (bool) + будет доступен во всех шаблонах как переменная контекста: + {% if IS_DEBUG %}...{% endif %} + """ + return {"IS_DEBUG": settings.DEBUG} diff --git a/lpon_site/lpon_site/settings.py b/lpon_site/lpon_site/settings.py index b9648e5..15ae359 100644 --- a/lpon_site/lpon_site/settings.py +++ b/lpon_site/lpon_site/settings.py @@ -105,6 +105,7 @@ TEMPLATES = [ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'frontend.context_processors.is_debug', ], }, },