Django:如何访问中间件类中的 URL 正则表达式参数?

Posted

技术标签:

【中文标题】Django:如何访问中间件类中的 URL 正则表达式参数?【英文标题】:Django: How to access URL regex parameters inside a middleware class? 【发布时间】:2012-07-31 07:19:17 【问题描述】:

我正在 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] 值。

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

【问题讨论】:

【参考方案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/en/1.0/chapter08/#cn38

特别是

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

【讨论】:

成功了。我不得不使用 view_args[0] 来获取公司名称。非常感谢。

以上是关于Django:如何访问中间件类中的 URL 正则表达式参数?的主要内容,如果未能解决你的问题,请参考以下文章

django 在列表中使用正则表达式排除 url

如何使用标准 django 过滤器访问加入“中间”表?

django url路由参数错误

Django 重定向到 /accounts/profile

django 2.2.5 URL 路径中的 URL 正则表达式

CRM 权限设置