2014-01-06 6 views
19

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

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

Я высоко ценю ваш ответ. Заранее спасибо!

+4

Я предлагаю вам начать с превосходным [Django учебника] (https://docs.djangoproject.com/en/dev/intro/tutorial01/), который объясняет основные понятия, такие, как те, которые Вы задаете для. –

ответ

42

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

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

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

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

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

-sid

+0

Большое спасибо Sid !. Я очень ценю вашу помощь и ваше время! Вы разъяснили мои сомнения по этому поводу. Я взял ваш класс, потому что я строю MVP для идеи, которую у меня есть. Поэтому я заканчиваю его и выхожу за пределы, читая «два ложки джанго», но есть много понятий, которые я до сих пор не совсем понимаю. В ответе ниже я расскажу о том, что я пытаюсь сделать с этим конкретным приложением. –

1

Context описан довольно хорошо в the official documentation. Короче говоря:

  1. В изо дня в день использования, в основном косвенно, потому что helper functions построим Context для вас

  2. См .: 1 вам это нужно, только если вы используете the low-level api

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

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

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

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

Смежные вопросы