Django中FORCE_SCRIPT_NAME配置导致URL重复前缀问题求助
Django中FORCE_SCRIPT_NAME导致URL前缀重复的解决办法
问题场景
必须通过FORCE_SCRIPT_NAME = "/myapp/"配置应用路径,但使用Django模板标签{% url %}跳转页面时,生成的URL会重复添加/myapp/前缀,最终得到错误地址:http://127.0.0.1:8000/myapp/myapp/another-page/。
相关代码
- settings.py
FORCE_SCRIPT_NAME = "/myapp/"
- myapp/urls.py
urlpatterns = [ path('', views.index, name='index'), path('another-page/', views.another_page, name='another_page'), ]
- 项目根urls.py
urlpatterns = [ path("admin/", admin.site.urls), path('myapp/', include('myapp.urls')), ]
- views.py
def index(request): return render(request, 'home.html') def another_page(request): return render(request, 'another_page.html')
- 首页模板home.html
<body> <h1>Welcome to the Home Page!</h1> <a href="{% url 'another_page' %}"> <button type="button">Go to Another Page</button> </a> </body>
解决办法
方案一:调整根路由配置(优先推荐)
FORCE_SCRIPT_NAME已经为整个应用指定了/myapp/前缀,此时根路由无需再添加myapp/路径,否则会导致双重叠加。修改项目根urls.py:
urlpatterns = [ path("admin/", admin.site.urls), path('', include('myapp.urls')), ]
修改后,{% url 'another_page' %}会正确生成http://127.0.0.1:8000/myapp/another-page/。
方案二:移除FORCE_SCRIPT_NAME(若允许)
如果业务场景不需要强制使用FORCE_SCRIPT_NAME,直接删除该配置项,仅通过根路由的myapp/路径控制应用前缀,也能避免URL重复问题。
内容的提问来源于stack exchange,提问作者MarcosL
相关产品推荐
相关产品推荐

