Django项目404错误与AttributeError异常排查求助
问题原因排查
1. 初始空路径404错误原因
最初你的应用urls.py中仅配置了index.html、experience.html这类带后缀的路由,未为空路径''配置对应的路由规则,访问根路径http://127.0.0.1:8000/时,Django无法在URLconf中匹配到对应规则,因此抛出404错误。
2. 新增空路由后'tuple'对象没有get属性错误原因
你原有views.py中每个视图函数的return语句末尾都多了一个逗号:
def index(request): return render(request, 'index.html', {}),
Python中表达式末尾加逗号会自动将返回值包装为元组,而Django要求视图函数必须返回HttpResponse对象,你实际返回的是(HttpResponse对象, )格式的元组,中间件处理响应时需要调用响应对象的get方法读取头信息,元组没有该方法,因此抛出AttributeError。
你给出的临时修复代码刚好删除了return后的多余逗号和无意义的空字典参数,因此对应页面恢复正常。
完整解决方案
- 修正所有视图函数的返回值,删除return语句末尾的多余逗号,也可以省略render第三个参数的空字典(render的上下文参数默认为空,可直接省略),修正后的完整views.py如下:
from django.shortcuts import render def index(request): return render(request, 'index.html') def experience(request): return render(request, 'experience.html') def projects(request): return render(request, 'projects.html') def research(request): return render(request, 'research.html') def education(request): return render(request, 'education.html') def comeback(request): return render(request, '404.html') def design(request): return render(request, 'design.html')
- 在应用urls.py中补充空路径的路由配置,绑定到对应的index视图即可,修正后的完整应用urls.py如下:
from django.urls import path from . import views urlpatterns = [ # 补充空路径路由 path('', views.index, name="index"), path('index.html', views.index, name="index"), path('experience.html', views.experience, name="experience"), path('projects.html', views.projects, name="projects"), path('research.html', views.research, name="research"), path('education.html', views.education, name="education"), path('404.html', views.comeback, name="comeback"), path('design.html', views.design, name="design"), ]
- 可选优化:如果不需要URL携带.html后缀,可以直接删除路由中的
.html标识,例如改为path('experience/', views.experience, name="experience"),访问时使用http://127.0.0.1:8000/experience/ 即可,符合Django常规设计规范。
内容的提问来源于stack exchange,提问作者Trevor Seibert
相关产品推荐
相关产品推荐

