Django获取URL数据:路径参数与查询字符串详解
本文详解Django中获取URL数据的两种主要方式:URL路径参数与URL关键字(查询字符串)。通过path和re_path函数配置路由,分别介绍如何捕获路径中的动态参数及正则分组。同时解析HttpRequest.GET属性与QueryDict对象的使用,演示如何从查询字符串中提取键值对数据,适用于Web开发中常见的数据传递场景。
Django获取URL中的数据
在Web开发中,URL携带的参数通常表现为两种不同的形式。具体示例如下所示:
1. https://zy010101.blog.csdn.net/article/details/120816954
2. https://so.csdn.net/so/search?q=Django&t=blog&u=zy010101
我们将第一种形式定义为“URL路径参数”,即参数直接嵌入在URL路径结构中;第二种形式称为“URL关键字形式”,通常指通过查询字符串传递的数据。接下来将详细讲解在Django框架中如何分别获取这两类数据。
URL路径参数
使用path函数
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
关于上述URL配置的解释,建议直接查阅Django官方文档以获取最准确的说明。
考虑到部分用户可能无法直接访问官方文档,此处将官方文档的相关片段直接引用如下:

使用re_path函数
当标准的path函数无法满足复杂的URL匹配需求时,可以使用re_path函数结合正则表达式来匹配URL路径中的参数。需要注意的是,在Django中使用正则表达式获取分组值的语法格式为(?P<name>pattern),其中name代表组名,pattern代表要匹配的具体模式。
from django.urls import path, re_path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]
这段URL配置的详细说明可参考关于使用正则表达式的相关文档。
同样,为了方便查阅,此处将官方文档中关于正则表达式部分的内容直接列出:

需要特别注意的是,经过正则表达式匹配后,所有捕获的参数都会以字符串的形式传递给视图函数或视图类,即使参数看起来像数字,也不会自动转换为整数类型。
URL关键字形式
除了通过URL路径传递数据外,通常还可以通过在URL参数(即查询字符串)中传递数据。例如:
http://www.demo.com/index?keys=123&values=qwe
上述URL传递了参数keys和values,它们的值分别为123和qwe。
在深入讲解之前,先介绍一个前置概念:QueryDict。
HttpRequest对象的属性GET和POST返回的都是QueryDict类型的对象,用于处理键值对数据。
在Django中,可以通过HttpRequest.GET属性来获取URL中的关键字参数。具体示例如下:
def test(request):
a = request.GET.get("a")
b = request.GET.get("b")
c = request.GET.get("c")
a_all = request.GET.getlist("a")
res = a+'<br>'+b+'<br>'+c+'<br>'+str(a_all)
return HttpResponse(res)
现在使用如下的URL进行请求测试:
http://127.0.0.1:8008/test?a=1&a=2&b=3&c=4
页面显示结果如下所示:

查询字符串的获取不区分HTTP请求方式。即使客户端使用POST方式发起请求,依然可以通过request.GET属性获取请求中的查询字符串数据。
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注本站的更多内容!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













