Что такое контекст в Джанго?
Я новичок в 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
достаточно хорошо описано в официальной документации. Короче:
В повседневном использовании, главным образом косвенно, потому что вспомогательные функции создают
Context
для тебяСм. 1.: вам это нужно только если вы используете API низкого уровня
Нет, контекстный процессор - это функция, которая принимает запрос и возвращает словарь переменных, которые затем доступны во всех шаблонах, которые отображаются с
RequestContext
, например:def get_stuff_from_session(request): return {'stuff': request.session['stuff']}