Django Middleware:如何从中间件访问视图的参数

时间:2010-02-04 01:47:08

标签: django django-middleware

假设我有一个观点:

def pony_view(request, arg1, arg2):
    ... Make ponies, etc ...

还有一个中间件:

class MyMiddleware(object):
    def process_request(request):
        # How do I access arg1, arg2 here?

当然是arg1,而arg2将通过URL params与urls.py一起传递。

我需要这样做的原因是因为我想在view函数运行之前向request.session添加一些东西(虽然我需要从URL中获取)。

1 个答案:

答案 0 :(得分:8)

您必须实施process_view方法。

它有这个签名:

process_view(self, request, view_func, view_args, view_kwargs)

并在调用视图函数之前执行:

  在Django调用视图之前调用

process_view()。它应返回NoneHttpResponse对象。如果它返回None,Django将继续处理此请求,执行任何其他process_view()中间件,然后执行相应的视图。如果它返回一个HttpResponse对象,Django将不会打扰调用任何其他请求,视图或异常中间件或相应的视图;它将返回HttpResponse。每次响应都会调用响应中间件。

然后,您应该能够使用以下网址访问arg1arg2

class MyMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        arg1, arg2 = view_args[:2]