一尘不染

Django:如何在中间件类中访问URL regex参数?

python

我正在Google App Engine上的Django项目上工作。我有一个类似的网址:

http://localhost:8080/[company]/projects/project

请注意,这[company]是我的urls.py中定义的URL参数,例如:

(r'(^[a-zA-Z0-9-_.]*)/projects/project/(\d*)', 'projects.views.project_form'),

我想[company]从中间件获取值,在中间件中将GAE数据存储名称空间设置为该[company]值。

是否可以[company]process_request中间件类方法中传递的请求对象中获取参数?


阅读 280

收藏
2021-01-20

共1个答案

一尘不染

如果您使用process_view中间件,则可以访问views参数,因此可以访问公司价值。看一下函数的定义:

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

view_args是将被传递到视图的位置参数的列表,view_kwargs是将被传递到视图的关键字参数的字典。

因此您应该只能从那里抓取它,例如:

def process_view(self, request, view_func, view_args, view_kwargs):
    company = view_kwargs.get('company', None)

这是django图书中的更多信息,它们说明了url中已命名和未命名组如何在您的视图中转换为args和kwargs:

http://www.djangobook.com/zh/1.0/chapter08/#cn38

尤其

这个[命名的url组]完成与上一个示例完全相同的功能,只是有一个微妙的区别:捕获的值作为关键字参数而不是位置参数传递给视图函数。

2021-01-20