Django如何配置动态URL参数实现designer页面传递产品名称
Django designer页面路径参数配置解决方案
核心问题
你当前配置的designer/路径规则没有捕获后续的产品名称参数,且Django的path()函数不支持直接写正则规则,需要用指定的路径转换器语法,或者改用re_path()实现正则匹配。
方案1:使用path路径转换器(推荐,适合绝大多数场景)
第一步:修改urls.py配置
调整urlpatterns,新增带参数的designer路径,可同时兼容原有查询参数的访问方式:
urlpatterns = [ path('', overview, name='overview'), # 保留原有路径,兼容旧的查询参数访问形式 path('designer/', designer, name='designer'), # 新增带产品名称参数的路径,str转换器匹配所有不含/的字符 path('designer/<str:product_name>/', designer, name='designer_with_product'), path('administration/', administration, name='administration'), path('admin/', admin.site.urls), ]
第二步:修改视图函数参数
调整designer视图的入参,接收路径参数,同时兼容查询参数取值:
# 新增product_name参数,设置默认值None兼容无参数访问 def designer(request, product_name=None): # 优先取路径参数,路径参数为空时尝试从查询参数取值 if not product_name: product_name = request.GET.get('product') # 后续原有业务逻辑不变,直接使用product_name变量即可 # ...
方案2:使用re_path正则匹配(适合产品名包含特殊字符场景)
如果产品名称包含.、/等特殊字符,str转换器无法满足匹配需求,可改用正则匹配:
- 先在urls.py头部导入re_path:
from django.urls import re_path - 修改urlpatterns配置:
urlpatterns = [ path('', overview, name='overview'), path('designer/', designer, name='designer'), # 正则命名捕获组,匹配designer/后的所有内容作为product_name参数 re_path(r'^designer/(?P<product_name>.+)/$', designer, name='designer_with_product'), path('administration/', administration, name='administration'), path('admin/', admin.site.urls), ]
视图函数修改逻辑和方案1完全一致。
常见404排查点
- 路径末尾的斜杠不要遗漏,Django默认开启自动补全斜杠的配置,规则不写尾斜杠会导致匹配失败
- 路径中捕获的参数名要和视图函数的入参名完全一致
- 如果不需要兼容旧的查询参数写法,可以直接删除原有
designer/规则,仅保留带参数的规则即可
内容的提问来源于stack exchange,提问作者KayGee
相关产品推荐
相关产品推荐

