4

假设我有一个观点:

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 将通过带有 urls.py 的 URL 参数传入。

我需要这样做的原因是因为我想在视图函数运行之前向 request.session 添加一些东西(虽然我需要来自 URL 的东西)。

4

1 回答 1

11

您将必须实现该process_view方法。

它有这个签名:

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

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

process_view()在 Django 调用视图之前调用。它应该返回一个None或一个HttpResponse对象。如果它返回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]
于 2010-02-04T01:53:56.057 回答