Django+DRF项目配置自定义404页面后正常链接返回服务端错误如何解决?
问题根因
你遇到的问题由两个常见的配置错误导致:
- 错误使用DRF路由器注册非视图集类
DRF的DefaultRouter/SimpleRouter仅支持注册继承自ViewSet的视图类,你代码中注册的ContactAPIView如果是普通APIView子类而非视图集,路由匹配后会因为无法映射标准动作抛出异常,返回500错误。 - 空路径视图集路由拦截范围过大
你在accounts/urls.py中注册了空路径r''对应的ProfileView,该路由会匹配所有/me/前缀下未被其他路由匹配的路径,如果ProfileView的逻辑存在参数校验、权限判断等问题,也会导致正常访问抛出异常。
解决步骤
- 修正非视图集的路由配置
将所有非视图集类的路由从路由器注册中移除,改用标准path配置,示例如下:
# accounts/urls.py 修正后的配置 from django.urls import path, include from .views import ContactAPIView, ProfileView, AdminContactView, AddressLinkView from rest_framework import routers from django.contrib.auth import views as auth_views from rest_framework.authtoken.views import obtain_auth_token router = routers.DefaultRouter() # 仅保留继承自ViewSet的视图类的注册 router.register(r'phones',AdminContactView, basename='phone') router.register(r'addresses',AddressLinkView, basename='addresses') urlpatterns = [ path('api-auth/', include('rest_framework.urls')), # 普通APIView改用path配置 path('contact/', ContactAPIView.as_view(), name='contact'), # 手动配置ProfileView的对应动作,示例为GET请求的列表视图 path('', ProfileView.as_view({'get': 'list'}), name='profile'), path('password-reset/', auth_views.PasswordResetView.as_view(), name='password_reset'), path('password-reset/done/', auth_views.PasswordResetDoneView.as_view( template_name='password_reset_done.html' ), name='password_reset_done'), path('password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'), path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'), ] urlpatterns += router.urls
- 临时开启DEBUG定位具体异常
你当前DEBUG = False无法看到具体报错信息,临时修改为DEBUG = True后访问报错路径,可直接拿到异常栈信息,快速定位其他潜在问题。 - 检查路径匹配逻辑
确认my_works应用下的路由拼写和你访问的路径一致,比如你举例的/en/book需要对应存在book的路由规则,而非你当前注册的带s后缀的books。 - 确认自定义404视图参数正确
你配置的error_404_view必须接收request和exception两个参数,示例正确写法如下:
# accounts/views.py from django.shortcuts import render def error_404_view(request, exception): return render(request, '404.html', status=404)
内容的提问来源于stack exchange,提问作者Abrorjon
相关产品推荐
相关产品推荐

