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

发布于 2021-01-29 14:57:20

我正在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中间件类方法中传递的请求对象中获取参数?

关注者
0
被浏览
165
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果您使用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组]完成与上一个示例完全相同的功能,只是有一个微妙的区别:捕获的值作为关键字参数而不是位置参数传递给视图函数。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看