0

假设,我们有一个 url 路径:

path('something/<int:some_param>/test/', views.some_view)

当用户点击这个 url 时,django会创建一个 , 的实例HttpRequest,该实例将被传递给some_view视图。有没有办法some_param从代码外的请求对象中获取url参数some_view?(例如,做一些依赖于some_param自定义中间件的处理)。


一种可能的解决方案是解析HttpRequest.path属性,但有没有预先构建的方法来做到这一点?

4

2 回答 2

1

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,使用它进行计算,使用它获取一些数据库数据等。然后一旦你完成了,您需要返回一个响应对象。通常通过调用renderTemplateResponse使用模板或在没有模板的情况下返回 HttpResponse。您渲染模板提供了一个context字典,您可以自由地将任何您喜欢的内容放入(如some_param)中,这使得它可以在您的 HTML 模板中呈现。render然后通过函数或类的魔力将呈现的 HTML 模板作为响应返回给用户TemplateResponse,从而结束查看过程。即像这样:

return TemplateResponse(request, 'template.html', context)

some_param在视图之间存储,您需要将其保存在数据库中,将其存储在用户会话中,或使用 cookie。或者通过 /?param=some_param 将其传递到 url 内或 url 外的下一个视图。不说你some_param以后需要什么,很难解决你的问题。

于 2021-11-12T23:55:46.453 回答
0

这里一种可能的解决方案是使用模块中的resolve函数django.urls。如果您想从与HttpRequest视图函数之外的对象相关的 URL 路径访问 URL 参数,这将非常有用。例如,获取 URL 参数并在自定义中间件或代码的其他部分中处理它们。

例子:

from django.urls import resolve

...

func, args, kwargs = resolve(some_request.path)

于 2021-11-17T16:47:14.567 回答