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

标签 python django

我有一个自定义中间件,在它的 process_view 期间我得到了一些 token 。我需要将此 token 传递给渲染结果 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 中?

最佳答案

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

request['my_key'] = 'my_value'

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

request.my_attribute = 'my_value'

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

关于python - 将数据从 django middleware.process_view 传递到模板上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39122541/

相关文章:

python - 如何使用 python 绘制 Friedman-Nemenyi 检验的结果

python - 我应该在类文档字符串中列出类方法吗?

django - BASE_DIR 返回设置路径而不是项目路径(django 1.10)

python - 在 include 中使用命名空间有什么意义? ( Django 2.0)

Django + 什么NOSQL在生产中使用最成熟?

django - 如何禁用 Django REST Framework 缓存?

javascript - 通过 Ajax 验证 django html 模板中至少选中一个复选框

python - 按住一个键并释放另一个

python - 在 Python/Pandas/PostgreSQL 中将表名作为函数参数传递

python - 在 Anaconda 中设置 Python 缩进