it-roy-ru.com

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

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

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

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

33
Camilo Sanchez

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

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

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

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

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

-sid

59
Sid

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

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

12
Victor Castillo Torres

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

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

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

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

    def get_stuff_from_session(request):
        return {'stuff': request.session['stuff']}
    
1
sk1p