我目前正在定义正则表达式,以便捕获URL中的参数,如教程中所述。我如何访问参数从URL作为HttpRequest对象的一部分?

我的HttpRequest。GET当前返回一个空的QueryDict对象。

我想学习如何在没有库的情况下做到这一点,这样我就可以更好地了解Django。


当前回答

views.py

从rest_framework。response import响应 Def update_product(请求,pk): 返回响应({“pk”:pk})

Pk表示主键。

urls . py

从产品。视图导入update_product django。url导入路径 Urlpatterns = [ …, 路径(更新/产品/ < int: pk >”,update_product) ]

其他回答

对于只有request对象的情况,可以使用request.parser_context['kwargs']['your_param']

如果你只能访问视图对象,那么你可以通过这种方式获取URL路径中定义的参数:

view.kwargs.get('url_param')

如果你只有访问请求对象的权限,使用下面的方法:

request.resolver_match.kwargs.get('url_param')

在Django 3上测试。

views.py

从rest_framework。response import响应 Def update_product(请求,pk): 返回响应({“pk”:pk})

Pk表示主键。

urls . py

从产品。视图导入update_product django。url导入路径 Urlpatterns = [ …, 路径(更新/产品/ < int: pk >”,update_product) ]

你不妨检查一下请求。META字典可以访问很多有用的东西 PATH_INFO, QUERY_STRING

# for example
request.META['QUERY_STRING']

# or to avoid any exceptions provide a fallback

request.META.get('QUERY_STRING', False)

你说它返回空的查询字典

我认为你需要调整你的url接受必要或可选的args或kwargs Django为你提供了处理后悔的所有能力,比如:

url(r'^project_config/(?P<product>\w+)/$', views.foo),

更多信息请访问django-optional-url-parameters

使用GET

request.GET["id"]

使用POST

request.POST["id"]