如何从 HttpRequest 对象获取 url 参数
How to get url params from the HttpRequest object
假设,我们有一个 url 路径:
path('something/<int:some_param>/test/', views.some_view)
当用户点击此 url 时,django
生成 HttpRequest
的实例,该实例将被传递到 some_view
视图。有没有办法从some_view
代码之外的请求对象中获取some_param
url参数? (例如,在自定义中间件中做一些依赖于 some_param
的处理)。
一种可能的解决方案是解析 HttpRequest.path
属性,但是是否有任何预构建的方法来执行此操作?
Django 使用请求对象和 some_param
调用您的视图,您可以在 views.some_view
中访问它。您的函数将具有以下签名:
def some_view(request, some_param):
....
或:
def some_view(request, **kwargs):
some_param=kwargs.get('some_param', None)
然后您可以在您的视图中使用 some_param
来做任何您需要做的事情,将它保存在数据库中,将它放入 cookie 中,用它进行计算,用它获取一些数据库数据等。完成后,您需要 return 一个响应对象。通常通过使用模板调用 render
或 TemplateResponse
或不使用模板调用 HttpResponse return。您呈现的模板提供了一个 context
字典,您可以自由地将任何您喜欢的东西放入其中(例如 some_param
),这使得它可以在您的 HTML 模板中呈现。呈现的 HTML 模板然后通过 render
函数或 TemplateResponse
class 的魔力 returned 作为对用户的响应,这结束了查看过程。 IE。像这样:
return TemplateResponse(request, 'template.html', context)
要在视图之间存储 some_param
,您需要将其保存在数据库中、存储在用户会话中或使用 cookie。或者通过 /?param=some_param 将其传递到 url 内部或 url 外部的下一个视图。不说你以后需要什么some_param
,很难解决你的问题。
此处一种可能的解决方案是使用 django.urls
模块中的 resolve
函数。如果您想从与视图函数外部的 HttpRequest
对象相关的 URL 路径访问 URL 参数,这将非常有用。例如,获取 URL 参数并在自定义中间件或代码的其他部分中处理它们。
示例:
from django.urls import resolve
...
func, args, kwargs = resolve(some_request.path)
假设,我们有一个 url 路径:
path('something/<int:some_param>/test/', views.some_view)
当用户点击此 url 时,django
生成 HttpRequest
的实例,该实例将被传递到 some_view
视图。有没有办法从some_view
代码之外的请求对象中获取some_param
url参数? (例如,在自定义中间件中做一些依赖于 some_param
的处理)。
一种可能的解决方案是解析 HttpRequest.path
属性,但是是否有任何预构建的方法来执行此操作?
Django 使用请求对象和 some_param
调用您的视图,您可以在 views.some_view
中访问它。您的函数将具有以下签名:
def some_view(request, some_param):
....
或:
def some_view(request, **kwargs):
some_param=kwargs.get('some_param', None)
然后您可以在您的视图中使用 some_param
来做任何您需要做的事情,将它保存在数据库中,将它放入 cookie 中,用它进行计算,用它获取一些数据库数据等。完成后,您需要 return 一个响应对象。通常通过使用模板调用 render
或 TemplateResponse
或不使用模板调用 HttpResponse return。您呈现的模板提供了一个 context
字典,您可以自由地将任何您喜欢的东西放入其中(例如 some_param
),这使得它可以在您的 HTML 模板中呈现。呈现的 HTML 模板然后通过 render
函数或 TemplateResponse
class 的魔力 returned 作为对用户的响应,这结束了查看过程。 IE。像这样:
return TemplateResponse(request, 'template.html', context)
要在视图之间存储 some_param
,您需要将其保存在数据库中、存储在用户会话中或使用 cookie。或者通过 /?param=some_param 将其传递到 url 内部或 url 外部的下一个视图。不说你以后需要什么some_param
,很难解决你的问题。
此处一种可能的解决方案是使用 django.urls
模块中的 resolve
函数。如果您想从与视图函数外部的 HttpRequest
对象相关的 URL 路径访问 URL 参数,这将非常有用。例如,获取 URL 参数并在自定义中间件或代码的其他部分中处理它们。
示例:
from django.urls import resolve
...
func, args, kwargs = resolve(some_request.path)