Django渲染HTML页面后URL自动变为#/的问题求助
解决Django页面渲染后URL自动变为#/的问题
问题原因
你遇到的URL自动跳转到/#/的情况,核心原因是Django REST Framework(DRF)的DefaultRouter默认行为:它会在根路径(如你的/api/)自动添加可浏览API的入口视图,访问该根路径时会触发重定向到/#/。页面渲染后出现跳转,可能是前端代码逻辑、路由匹配优先级或DRF路由配置冲突导致的。
解决方案
1. 替换DRF的DefaultRouter为SimpleRouter
如果不需要DRF自带的可浏览API根页面,直接用SimpleRouter替代DefaultRouter即可——它不会添加根路径的重定向视图:
# urls.py from rest_framework.routers import SimpleRouter # 替换为SimpleRouter router = SimpleRouter() router.register(r'users', UserViewSet) # ... urlpatterns = [ path('homepage/', views.index, name='homepage'), path('', include(router.urls)), ]
2. 给DRF路由添加专属前缀
调整DRF路由的路径,避免和项目/app的根路径冲突,这样根路径就不会被DRF路由接管,也就不会触发重定向:
# urls.py router = routers.DefaultRouter() router.register(r'users', UserViewSet) # ... urlpatterns = [ path('homepage/', views.index, name='homepage'), path('api/', include(router.urls)), # 给DRF路由添加前缀 ]
调整后,DRF的API接口会变为/api/api/users/,根路径/api/不再由DRF处理,跳转问题自然消失。
3. 排查前端代码的跳转逻辑
如果你的index.html引入了Vue、React等前端框架或自定义JS,检查以下内容:
- 前端路由配置是否默认重定向到
/#/ - 是否存在
window.location.href、history.pushState等修改URL的代码 - 是否有错误的链接(如
<a href="/">)被意外触发
4. 确认路由匹配顺序
确保homepage路由在DRF路由之前(你当前的配置已经符合),避免DRF路由提前匹配请求。若仍有问题,可以给homepage路由添加更明确的前缀,进一步区分路由规则。
内容的提问来源于stack exchange,提问作者user14491987
相关产品推荐
相关产品推荐

