9

有没有一种方法可以访问自定义上下文处理器中视图传递的当前上下文,以便我可以根据需要添加缺少的变量而不是覆盖现有变量?

我想要实现的目标:

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

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

4

4 回答 4

2

您无法从上下文处理器中访问当前上下文,而且我想中间件也不是适合您的解决方案。也许创建您自己在视图中使用的模板渲染函数是有意义的,并且您总是将上下文和当前请求传递给它,并将您想要的功能放入其中并在最后使用通常的渲染函数 django 渲染模板为您提供!

于 2010-10-03T23:51:43.663 回答
2

您可以使用TemplateResponse和 TemplateResponse中间件来实现这一点。

于 2012-02-12T01:36:24.443 回答
1

我不确定自定义模板上下文处理器是否可以做到这一点。从文档中:

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

(强调我的)。

您应该考虑编写自定义中间件。如果有人知道制作上下文处理器的方法,我想知道。

于 2010-10-03T17:26:14.147 回答
0

您不能使用 Django 上下文处理器执行此操作:它们只能访问请求对象,而不是其结果添加到的现有模板上下文。

将城市存储在会话中听起来不错,如果这是您想要的。模板将负责任何进一步的违约;如果您需要一些花哨的东西,您可能希望将其包装在可重用的自定义模板标签中。

于 2010-10-03T17:44:46.040 回答