将数据从django middleware.process_view传递到模板上下文

时间:2016-08-24 11:50:52

标签: python django

我有一个自定义中间件,在其process_view期间,我获得了一些令牌。我需要将此标记传递给渲染的结果html。

我认为context_processor是修改上下文的好地方,但看起来很难将一些数据从中间件传递到处理器。

但似乎为process_view和上下文处理器进行通信的唯一方法是请求对象。如果为请求设置任何字段,我得到'WSGIRequest'对象不支持项目分配'错误。这是一段代码:

def process_view(self, request, view_func, view_args, view_kwargs):
   ...
   with log(request, view_func.__name__, info) as id:

      request['TOKEN_ID'] = logger.get().get_id() #here is an error
      response = view_func(request, *view_args, **view_kwargs)

所以,看起来我做错了什么。有没有办法沟通middleware.process_view和context_processor?或者我应该改变另一种方法将数据从中间件传递到html?

1 个答案:

答案 0 :(得分:1)

尝试使用字典项目分配时会引发该错误:

request['my_key'] = 'my_value'

但请求不是字典,而是一个对象。与所有对象一样 - 您必须熟悉的Django模型 - 您需要设置属性,而不是项目。

request.my_attribute = 'my_value'

(下次,请显示您使用的代码和您获得的完整追溯。)