Контекстные процессоры Django: возможно ли получить доступ к текущему контексту в ContextProcessor? - PullRequest
9 голосов
/ 03 октября 2010

Есть ли способ получить доступ к текущему контексту, передаваемому представлением, в обработчике пользовательского контекста, чтобы я мог добавить отсутствующую переменную, если я хочу, а не переопределять существующую переменную?

Что я пытаюсь достичь:

Я создаю свои URL-адреса так: / city_slug / и хочу проверить, существует ли переменная city в контексте, в противном случае яхотите добавить город в мой контекст (возможно, используется последний использованный город, сохраненный в переменной сеанса, в противном случае по умолчанию используется какой-либо город, и может быть даже установлена ​​переменная сеанса для следующего использования.)

Я думаю, что это очень распространенная проблемаКак вы, ребята, решаете это?

Ответы [ 4 ]

2 голосов
/ 12 февраля 2012

Этого можно добиться, используя TemplateResponse и TemplateResponse middleware .

2 голосов
/ 04 октября 2010

Вы не можете получить доступ к текущему контексту из контекстного процессора, и я думаю, что промежуточное ПО не будет правильным решением для вас.Возможно, имеет смысл создать собственную функцию рендеринга шаблона, которую вы используете в своих представлениях, и вы всегда передаете ей контекст и текущий запрос, помещаете в него нужные вам функции и отрисовываете шаблон в конце с помощью обычных функций рендеринга djangoпредоставляет вам!

1 голос
/ 03 октября 2010

Я не уверен, может ли пользовательский процессор контекста шаблона сделать это. Из документации :

Контекстный процессор имеет очень простой интерфейс: это просто функция Python, которая принимает один аргумент, объект HttpRequest и возвращает словарь, который добавляет в контекст шаблона. Каждый контекстный процессор должен возвращать словарь.

(Акцент мой).

Вместо этого вам следует взглянуть на написание собственного промежуточного программного обеспечения. Если кто-нибудь знает, как сделать так, чтобы контекстный процессор делал это, я бы хотел знать.

0 голосов
/ 03 октября 2010

Вы не можете сделать это с обработчиками контекста Django: они имеют доступ только к объекту запроса, но не к существующему контексту шаблона, к которому добавлен их результат.

Хранение города на сессиях звучит хорошо, если вы этого хотите. Шаблоны будут нести ответственность за любые дальнейшие дефолты; если вам нужно что-то причудливое, вы можете посмотреть, как его обернуть в многократно используемый пользовательский тег шаблона .

...