假设我有一个观点:
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中获取)。
答案 0 :(得分:8)
您必须实施process_view
方法。
它有这个签名:
process_view(self, request, view_func, view_args, view_kwargs)
并在调用视图函数之前执行:
在Django调用视图之前调用
process_view()
。它应返回None
或HttpResponse
对象。如果它返回None
,Django将继续处理此请求,执行任何其他process_view()
中间件,然后执行相应的视图。如果它返回一个HttpResponse
对象,Django将不会打扰调用任何其他请求,视图或异常中间件或相应的视图;它将返回HttpResponse
。每次响应都会调用响应中间件。
然后,您应该能够使用以下网址访问arg1
和arg2
class MyMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
arg1, arg2 = view_args[:2]