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

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/。

相关代码

  1. settings.py
FORCE_SCRIPT_NAME = "/myapp/"
  1. myapp/urls.py
urlpatterns = [
    path('', views.index, name='index'),
    path('another-page/', views.another_page, name='another_page'),
]
  1. 项目根urls.py
urlpatterns = [
    path("admin/", admin.site.urls),
    path('myapp/', include('myapp.urls')),
]
  1. views.py
def index(request):
    return render(request, 'home.html')

def another_page(request):
    return render(request, 'another_page.html')
  1. 首页模板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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:05:07