Django URL传参报错:访问localhost:8000/streamers/1234匹配失败
解决Django URL路径匹配失败的问题
嘿,我一眼就揪出你遇到的问题根源了!你的URL配置里有个明显的语法错误,导致Django没法正确匹配请求路径。
问题分析
你当前的正则URL模式写法有误:
url(r'^streamers/(?P[0-9]+)/$', views.streamer, name='streamer'),
这里的正则命名捕获组语法不完整——(?P)后面必须跟尖括号包裹的参数名(比如<id>),正确写法应该是(?P<id>[0-9]+)。你漏掉了<id>部分,导致这个正则表达式无效,Django自然匹配不到streamers/34/这类路径。
另外你注释掉的那行配置也有问题:path(r'^streamers/<int:id>/', ...)是混合了path语法和正则符号的错误写法,path不需要^和$这类正则边界符,直接用路径转换器即可。
两种正确的配置方案
方案1:使用Django推荐的path语法(更简洁)
path是Django 2.0+主推的URL配置方式,不用写正则,直接用路径转换器(比如<int:id>):
from django.urls import path urlpatterns = [ path('streamers/<int:id>/', views.streamer, name='streamer'), ]
方案2:使用正则风格的re_path(原url方法)
如果你习惯用正则表达式,要修正命名捕获组的语法:
from django.conf.urls import url # 或者 from django.urls import re_path urlpatterns = [ url(r'^streamers/(?P<id>[0-9]+)/$', views.streamer, name='streamer'), ]
最后提醒
修改完URL配置后,一定要重启Django开发服务器,确保新配置生效。之后再访问localhost:8000/streamers/1234或者streamers/34/,应该就能正常匹配到对应的视图函数了。
内容的提问来源于stack exchange,提问作者salty_coffee
相关产品推荐
相关产品推荐

