Django中带查询字符串的URL模式配置及视图参数获取方法
嘿,我来帮你解决这个Django里的GET请求URL匹配和参数获取问题!
一、URL模式怎么写?
首先要明确:Django的URLconf 只匹配URL的路径部分(也就是?前面的内容),?后面的查询参数不需要写在正则表达式里。你的示例URL是/create-usecase/?usecase_name=test&...,所以只需要匹配/create-usecase/这个路径就行。
写法示例(推荐用path,更简洁):
在urls.py里添加:
from django.urls import path from . import views urlpatterns = [ # 匹配/create-usecase/路径,关联到对应的视图函数 path('create-usecase/', views.create_usecase, name='create-usecase'), ]
如果一定要用正则表达式(比如复杂路径场景),可以用re_path:
from django.urls import re_path from . import views urlpatterns = [ re_path(r'^create-usecase/$', views.create_usecase, name='create-usecase'), ]
这里的正则^create-usecase/$表示严格匹配以create-usecase/开头并结尾的路径,完全忽略后面的查询参数。
二、视图函数里怎么获取这些参数?
Django会自动把GET请求的查询参数封装到request.GET对象里(这是一个类似字典的对象),你可以用get()方法安全地获取参数值。
视图函数示例:
from django.http import HttpResponse def create_usecase(request): # 用get()方法获取参数,第二个参数是默认值,避免参数不存在时抛出KeyError usecase_name = request.GET.get('usecase_name', '') category = request.GET.get('category', '') sub_category = request.GET.get('sub_category', '') # 如果你确定某个参数一定存在,也可以直接用键取值,但不推荐(容易报错) # category = request.GET['category'] # 这里可以写你的业务逻辑,比如保存数据、返回响应等 print(f"收到的参数:UseCase名称={usecase_name},分类={category},子分类={sub_category}") return HttpResponse(f"已收到参数:{usecase_name}, {category}, {sub_category}")
额外说明:
- 关于
csrfmiddlewaretoken:这个是Django的CSRF验证令牌,通常POST请求才需要验证,GET请求里的这个参数你一般不需要在视图里处理,Django会自动忽略它。 - 参数类型转换:如果
category是数字类型,记得把获取到的字符串转成int,比如category = int(request.GET.get('category', 0))。
内容的提问来源于stack exchange,提问作者M.Sameh
相关产品推荐
相关产品推荐

