【问题标题】:Pass data from django middleware.process_view to the template context将数据从 django middleware.process_view 传递到模板上下文
【发布时间】:2016-08-24 11:50:52
【问题描述】:

我有一个自定义中间件,在它的 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?

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    request['my_key'] = 'my_value'
    

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

    request.my_attribute = 'my_value'
    

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

    【讨论】:

    • 是的,我想添加代码,但实际上它看起来很简单和“默认”,我认为不需要它。无论如何,我添加了它,因为这是我的代码问题。谢谢!
    • @daniel-roseman:如果我们需要将变量传递给任何模板(使用中间件)。哪个更好的方法是在中间件中设置属性来请求对象,最好使用上下文处理器并传递给中间件?
    猜你喜欢
    • 2020-03-19
    • 2019-02-16
    • 2016-06-29
    • 2018-10-04
    • 2021-10-26
    • 1970-01-01
    • 2021-04-21
    • 2016-03-18
    • 2018-05-19
    相关资源
    最近更新 更多