Подтвердить что ты не робот

Создание собственного обработчика контекста в django

Я пришел к тому моменту, когда мне нужно передать определенные переменные ко всем моим представлениям (главным образом переменные типа аутентификации).

Мне сказали, что писать собственный обработчик контекста - лучший способ сделать это, но у меня возникают некоторые проблемы.

Мой файл настроек выглядит следующим образом

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.contrib.messages.context_processors.messages",
    "sandbox.context_processors.say_hello", 
)

Как вы можете видеть, у меня есть модуль под названием "context_processors" и функция внутри того, что называется say_hello.

Что выглядит как

def say_hello(request):
        return {
            'say_hello':"Hello",
        }

Можно ли предположить, что теперь я могу сделать следующее в своих представлениях?

{{ say_hello }}

Прямо сейчас это ничего не делает в моем шаблоне.

Мое мнение выглядит как

from django.shortcuts import render_to_response

def test(request):
        return render_to_response("test.html")
4b9b3361

Ответ 1

Обработчик контекста, который вы написали, должен работать. Проблема в вашем понимании.

Вы уверены, что ваше представление отображается с помощью RequestContext?

Например:

def test_view(request):
    return render_to_response('template.html')

В приведенном выше представлении не будут использоваться контекстные процессоры, перечисленные в TEMPLATE_CONTEXT_PROCESSORS. Убедитесь, что вы поставляете RequestContext следующим образом:

def test_view(request):
    return render_to_response('template.html', context_instance=RequestContext(request))

Ответ 2

В соответствии с django docs вы можете использовать render как ярлык вместо render_to_response с аргументом context_instance:

В качестве альтернативы используйте ярлык render(), который является тем же самым, что и вызов render_to_response() с аргументом context_instance, который заставляет использовать RequestContext.

Ответ 3

Если вы используете ярлык Djangos render_to_response() для заполнения шаблона содержимым словаря, ваш шаблон будет передан экземпляр контекста по умолчанию (а не RequestContext). Чтобы использовать RequestContext в рендеринге шаблона, используйте ярлык render(), который совпадает с вызовом render_to_response() с аргументом context_instance, который заставляет использовать RequestContext.