Django新增车辆表单提交后出现404错误求助
解决「Page not found (404) No Cars matches the given query」错误
问题根源
URL路由顺序错误导致精确匹配路径被模糊匹配覆盖。Django会按urlpatterns从上到下的顺序匹配路径,cars/<slug:car_slug>/会优先捕获所有cars/xxx/格式的请求,包括cars/addpost/。此时Django会把addpost当作car_slug参数传入car_slug视图,尝试从Cars模型中查找slug为addpost的记录,因不存在该记录触发404错误。
修复步骤
调整hello/urls.py中路由的顺序,让精确匹配的cars/addpost/路径优先于模糊匹配的slug路径:
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='hello'), path('cars/addpost/', views.addpost, name='addpost'), # 移至模糊匹配路径之前 path("cars/<slug:car_slug>/", views.car_slug, name='car_slug'), ]
额外检查项
- 确认
addpost.html模板中表单的action属性正确指向addpost路由:<form method="post" action="{% url 'addpost' %}"> {% csrf_token %} <!-- 表单内容 --> </form> - 检查Brands模型是否已添加数据,因为
AddPostForm的brand字段要求选择已存在的品牌,若无数据会导致表单验证失败。
内容的提问来源于stack exchange,提问作者DaTo
相关产品推荐
相关产品推荐

