Django:请求对象在模板上下文中的透明性

1 投票
2 回答
881 浏览
提问于 2025-04-15 20:44

我想在我的请求对象中加入一个已经初始化的数据结构,这样在我的模板中就能方便地使用它。现在我做的是在所有的视图中手动传递这个数据,感觉很麻烦:

render_to_response(...., ( {'menu': RequestContext(request)}))

请求对象里包含了一对键值,这些键值是通过一个自定义的上下文处理器注入的。虽然这样可以实现,但我希望能有一种更通用的方法,把请求对象中选定的部分传递到模板上下文中。我尝试过通过通用视图来传递,但结果发现,在解析网址模式列表时,请求对象并没有被实例化。

2 个回答

0

我不太明白你的问题。

你可能是在抱怨每个视图都需要包含RequestContext,如果是这样的话,你需要写一个包装器来自动传递RequestContext。不过你还是得把请求传给它。如果你不想每次都传这个请求,可能需要像mikl建议的那样,自己创建一个中间件。

或者,你是在抱怨每个视图都要传很多菜单项。这种做法是不对的,你应该定义一个模板上下文处理器,这样可以确保这些菜单项在模板中默认就存在。

1

为了实现这个,你可能需要自己写一个中间件。这样一来,你就可以完全掌控请求的处理过程,包括在视图函数之前和之后。

中间件是一个非常强大的概念,其实实现起来并没有想象中那么难,但也不要用得过多——这样会让程序的流程变得难以理解。

撰写回答