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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:12:13