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 正则表达式参数?的主要内容,如果未能解决你的问题,请参考以下文章