Py学习  »  Django

Django上下文处理器:是否可以访问ContextProcessor中的当前上下文?

Srikanth Chundi • 4 年前 • 307 次点击  

是否有一种方法可以访问自定义上下文处理器中视图传递的当前上下文,以便在需要时添加缺少的变量,而不是重写现有变量?

我想达到的目标是:

我像这样构造我的url/city_slug/,我想检查city变量是否已经存在于上下文中,否则我想将city添加到我的上下文中(可能正在使用会话变量中存储的最后一个使用过的city,否则默认为某个城市,甚至可能设置会话变量以供下次使用)。

我觉得这是很常见的问题,你们是怎么解决的?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/32154
 
307 次点击  
文章 [ 4 ]  |  最新文章 4 年前
Pi Delport
Reply   •   1 楼
Pi Delport    13 年前

对于django上下文处理器,您不能这样做:它们只能访问请求对象,而不能访问其结果添加到的现有模板上下文。

如果你愿意的话,把城市储存在会议中听起来不错。模板将负责任何进一步的默认设置;如果您需要一些花哨的东西,您可能希望将其包装在可重用的 custom template tag .

Manoj Govindan
Reply   •   2 楼
Manoj Govindan    13 年前

我不确定自定义模板上下文处理器是否可以这样做。从 documentation :

上下文处理器有一个非常简单的接口:它只是一个python函数,它接受一个参数,一个httpRequest对象,并返回一个字典, 补充 到模板上下文。每个上下文处理器必须返回一个字典。

(强调我的)。

您应该考虑编写一个定制的中间件。如果有人知道让上下文处理器这样做的方法,我想知道。

Mikhail Korobov
Reply   •   3 楼
Mikhail Korobov    12 年前

你可以用 TemplateResponse 和模板响应 middleware .

Bernhard Vallant
Reply   •   4 楼
Bernhard Vallant    13 年前

您不能从上下文处理器中访问当前上下文,我想中间件也不是您的正确解决方案。也许创建自己在视图中使用的模板呈现函数是有意义的,并且始终将上下文和当前请求传递给它,并将所需的功能放入其中,最后使用Django提供的常规呈现函数呈现模板!