Django访问/products/5出现Error 404 Not Found问题求助
Django URL 404错误排查与修复
问题原因分析
- URL正则语法错误:命名捕获组缺少必要括号,正确格式应为
(?P<param_name>匹配规则),原代码中?P<productid>和?P<name>前未加(,导致Django无法识别参数;同时路径与视图映射错误,products路径指向了views.contact,users路径指向了views.about,完全不匹配对应业务逻辑。 - 正则匹配范围不符:原
products路径正则结尾强制要求/,但请求路径/products/5无结尾斜杠,导致匹配失败。 - views函数语法错误:
users函数的格式化字符串中用了俄文字母О(而非数字0),后续调用会触发格式化异常。
修复方案
1. 修正urls.py的正则与视图映射
替换为以下代码:
from django.urls import re_path from django.urls import path from firstapp import views urlpatterns = [ # 修复捕获组语法,映射正确视图,允许路径结尾带/或不带 re_path(r'^products/(?P<productid>\d+)/?$', views.products), # 修复users路径的捕获组与视图映射 re_path(r'^users/(?P<id>\d+)/(?P<name>\D+)/?$', views.users), re_path(r'^about/contact/', views.contact), re_path(r'^about/', views.about), # 加/避免匹配无关路径(如/aboutxxx) path('', views.index), ]
2. 修复views.py的格式化字符串错误
修改users函数:
def users(request, id, name): output = "<h2>User</h2><h3>id: {0} Name:{1}</h3>".format(id, name) return HttpResponse(output)
3. 验证修复
重启Django开发服务器,访问http://127.0.0.1:8000/products/5(注意原请求IP127.0.0.l是笔误,需改为127.0.0.1),即可正常显示产品信息。
内容的提问来源于stack exchange,提问作者Goip lol
相关产品推荐
相关产品推荐

