Django动态URL路由失效,访问动态路径出现404错误求助
Django动态URL路由404错误的排查与解决
嘿,我一眼就看出问题啦!你这是把Django两种URL路由的语法搞混了,再加上字符转义的小失误,才导致访问/view/5时出现404。
具体错误点
- 路由语法混用:你用的是旧版的
url()函数(基于正则表达式),但却写了新版path()函数才支持的<int:test_id>路径语法,这俩完全不兼容! - 转义字符错误:你的路由里出现了
<和>,这是HTML转义后的字符(对应<和>),就算去掉转义,url()也不认这种写法。 - 额外小问题:你的
views.py里if form.is_valid:少了括号,应该是if form.is_valid():,不然不管表单填得对不对,都会执行保存操作。
修正方案
方案1:继续使用url()(正则表达式方式)
把路由改成正则的写法,用(?P<test_id>\d+)来匹配数字ID并命名:
from django.conf.urls import url from . import views app_name = 'api' urlpatterns = [ url(r'^view/(?P<test_id>\d+)/$' , views.add_task_to_list, name= "add_task"), url(r'^$', views.index, name= "index") ]
方案2:推荐使用新版path()(更简洁)
如果你的Django版本是2.0及以上,建议直接用path(),语法更直观:
from django.urls import path from . import views app_name = 'api' urlpatterns = [ path('view/<int:test_id>/', views.add_task_to_list, name= "add_task"), path('', views.index, name= "index") ]
同时记得把views.py里的if form.is_valid:改成if form.is_valid():,确保表单验证正常工作。
这样修改后,访问/view/5就能正确匹配到add_task_to_list视图啦!
内容的提问来源于stack exchange,提问作者Ujjwal Kirti
相关产品推荐
相关产品推荐

