Что такое контекст в Джанго?

Я новичок в Django, поэтому я пытаюсь понять концепцию контекста и контекстного процессора.

  • Что такое контекст и почему вы его используете?
  • Является ли контекст значением, которое вам нужно иметь для использования в шаблоне?
  • Контекст и контекстный процессор одинаковы?

Я буду очень признателен за ваш ответ. Заранее спасибо!

3 ответа

Решение

Когда вы используете шаблон Django, он компилируется один раз (и только один раз) и сохраняется для будущего использования в качестве оптимизации. Шаблон может иметь имена переменных в двойных фигурных скобках, например {{ myvar1 }}, {{ myvar2 }}.

Контекст - это словарь с именами переменных в качестве "ключа" и их значениями в качестве "значения". Следовательно, если ваш контекст для вышеуказанного шаблона выглядит следующим образом: {myvar1: 101, myvar2: 102}, при передаче этого контекста в метод визуализации шаблона {{myvar1}} будет заменен на 101, а {{myvar2}} - на 102 в вашем шаблоне. Это упрощенный пример, но на самом деле объект Context - это "Контекст", в котором отображается шаблон.

Что касается ContextProcessor, это немного продвинутая концепция. В вашем файле settings.py вы можете указать несколько обработчиков контекста, которые принимают объект HttpRequest и возвращают словарь (аналогично объекту Context выше). Словарь (контекст), возвращаемый процессором контекста, объединяется с контекстом, переданным вами (пользователем) Django.

Вариант использования для контекстного процессора - это когда вы всегда хотите вставить определенные переменные в шаблон (например, местоположение пользователя может быть кандидатом). Вместо того чтобы писать код для вставки его в каждое представление, вы можете просто написать для него контекстный процессор и добавить его в настройки TEMPLATE_CONTEXT_PROCESSORS в settings.py.

Надеюсь, это имеет смысл. Спасибо, что приняли класс!

-sid

Контекст - это имя переменной -> отображение значения переменной, которое передается в шаблон.

Контекстные процессоры позволяют вам автоматически указывать количество переменных, которые устанавливаются в каждом контексте, без необходимости указывать переменные в каждом вызове render().

Context достаточно хорошо описано в официальной документации. Короче:

  1. В повседневном использовании, главным образом косвенно, потому что вспомогательные функции создают Context для тебя

  2. См. 1.: вам это нужно только если вы используете API низкого уровня

  3. Нет, контекстный процессор - это функция, которая принимает запрос и возвращает словарь переменных, которые затем доступны во всех шаблонах, которые отображаются с RequestContext, например:

    def get_stuff_from_session(request):
        return {'stuff': request.session['stuff']}
    
Другие вопросы по тегам