我似乎很难在我的一个中间件类中设置一个变量,然后我可以在模板层中访问该变量。
基本布局是这样的:
class TheMiddleware(object):
def __init__(self, etc):
stuff...
def process_response(self, request, response):
request.my_var = "whatever"
return response
然后在模板上获得不同的视图:
{% custom_tag arg_a %}
这是一个模板标签,应该从请求中返回变量:
@register.simple_tag
def custom_tag(arg_a):
return threading.currentThread().request.my_var
此错误与“渲染时捕获 AttributeError:'WSGIRequest' 对象没有属性 'my_var'”
我认为这可能是我在模板标签中访问请求的方式。所以我将 django.core.context_processors.request 添加到我的 TEMPLATE_CONTEXT_PROCESSORS 中,并尝试将请求对象传递给标签,然后直接从模板访问请求,但没有运气。
我想我对请求对象的工作方式缺乏了解。是否可以将变量分配给请求对象并在多个视图中选择该变量?我认为请求对象是通过视图传递的,但似乎生成了一个新实例。
如果是这种情况,您将如何在中间件中存储一个全局变量,然后您可以从应用程序中的任何位置访问它,无论是在视图中还是在模板中?
更新:
为了消除混淆(无论是我的还是其他人,我都不确定!)我没有尝试在视图的 process_response 中间件中设置请求变量,然后在同一视图的模板中选择它。我知道那是行不通的,因为在保存变量之前已经处理了模板。(这是我的故意行为)。
我有两个视图,view1和view2视图一个有一个装饰器,它导致中间件在请求中设置变量。我希望访问该变量的是 view2 模板,它是在设置变量之后出现的。