You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目404错误:student-notes页面匹配错误URL路由

Django项目404问题解决:student-notes页面被错误匹配到动态路由

问题现象

开发Django项目时,访问http://127.0.0.1:8000/student/student-notes出现404错误,错误提示为**"未找到匹配查询的standard"**,由student.views.SubjectListView触发。Django将该路径错误匹配到<slug:slug>动态路由,而非对应的student-notes固定路由,且错误页面未展示所有URL规则。

核心原因

Django的URL匹配遵循从上到下的顺序优先级,当动态路由(如<slug:slug>)放在固定路由(如student-notes)前面时,student-notes会被当作slug参数传入SubjectListView,而数据库中不存在slug为student-notes的Standard对象,因此抛出404。

解决方案

将所有固定路径的URL规则移动到动态路径规则之前,确保精确匹配优先于模糊匹配。

修改后的urls.py代码

from django.urls import path
from student import views
from django.contrib.auth.views import LoginView

app_name = 'student'

urlpatterns = [
path('studentclick', views.studentclick_view),
path('studentlogin', LoginView.as_view(template_name='student/studentlogin.html'),name='studentlogin'),
path('studentsignup', views.student_signup_view,name='studentsignup'),
path('student-dashboard', views.student_dashboard_view,name='student-dashboard'),
path('student-exam', views.student_exam_view,name='student-exam'),
path('take-exam/<int:pk>', views.take_exam_view,name='take-exam'),
path('start-exam/<int:pk>', views.start_exam_view,name='start-exam'),

path('calculate-marks', views.calculate_marks_view,name='calculate-marks'),
path('view-result', views.view_result_view,name='view-result'),
path('check-marks/<int:pk>', views.check_marks_view,name='check-marks'),
path('student-marks', views.student_marks_view,name='student-marks'),

path('standard-list', views.StandardListView.as_view(), name='standard-list'),
#path('',views.StandardListView.as_view(),name='standard_list'),

# 固定路径移到动态路径之前
path('student-notes',views.notes, name='student-notes'), 
path('delete_note/<int:pk>',views.delete_note,name='delete-notes'),
path('notes_detail/<int:pk>',views.NotesDetailView.as_view(),name='notes-detail'),
path('student-dictionary', views.dictionary, name='student-dictionary'),
path('student-books',views.Books, name='student-books'),
path('student-todos',views.todo, name='student-todos'),

# 动态路径放在后面
path('<slug:slug>', views.SubjectListView.as_view(), name='subject_list'),
path('<str:standard>/<slug:slug>/', views.LessonListView.as_view(),name='lesson_list'),
path('<str:standard>/<str:slug>/create/',views.LessonCreateView.as_view(), name='lesson_create'),
path('<str:standard>/<str:subject>/<slug:slug>/', views.LessonDetailView.as_view(),name='lesson_detail'),
path('<str:standard>/<str:subject>/<slug:slug>/update',views.LessonUpdateView.as_view(),name="lesson_update"),
path('<str:standard>/<str:subject>/<slug:slug>/delete',views.LessonDeleteView.as_view(),name='lesson_delete'),
]

补充说明

  • 错误页面仅显示部分URL规则:因为Django匹配到第一个符合条件的路由后就停止后续匹配,所以错误页面只展示到匹配成功的路由之前的规则。调整顺序后,固定路径会被优先匹配,不会触发动态路由的错误。
  • 额外检查:确保notes视图函数逻辑正常,Notes模型和数据库连接无异常。

原错误信息

页面未找到(404)
未找到匹配查询的standard
请求方法: GET
请求URL:    http://127.0.0.1:8000/student/student-notes
触发者:  student.views.SubjectListView
使用onlinexam.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式:

admin/
teacher/
student/ studentclick
student/ studentlogin [name='studentlogin']
student/ studentsignup [name='studentsignup']
student/ student-dashboard [name='student-dashboard']
student/ student-exam [name='student-exam']
student/ take-exam/<int:pk> [name='take-exam']
student/ start-exam/<int:pk> [name='start-exam']
student/ calculate-marks [name='calculate-marks']
student/ view-result [name='view-result']
student/ check-marks/<int:pk> [name='check-marks']
student/ student-marks [name='student-marks']
student/ standard-list [name='standard-list']
student/ <slug:slug> [name='subject_list']
当前路径student/student-notes匹配了最后一个规则。

你看到此错误是因为设置文件中DEBUG = True。将其改为False,Django会显示标准404页面。

内容的提问来源于stack exchange,提问作者Zenji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:02:03