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

为什么JavaScript的fetch方法在请求URL中添加多余斜杠(搭配Django使用)

问题原因

该现象是Django框架默认配置导致的:Django 默认开启 APPEND_SLASH 配置项,当收到的请求路径末尾没有斜杠、且和项目 urls.py 中定义的所有路由规则都不匹配时,会自动返回301重定向响应,自动在路径末尾添加斜杠后跳转,你看到的多余斜杠就是重定向后生成的路径。

解决方案
  • 方案1:前端请求路径主动加尾部斜杠(最推荐,符合Django默认路由规范)
    直接修改前端拼接URL的逻辑,给基础路径加上尾部斜杠即可,同时建议用URLSearchParams拼接参数避免特殊字符转义问题,代码示例:
    let url = `ajax_vehical_types/`;
    const params = new URLSearchParams();
    groups.forEach((x, i) => {
      params.append(`group[${i}]`, x);
    });
    if (params.toString()) {
      url += `?${params.toString()}`;
    }
    
    const vehical_type = await fetch(`${window.location.origin}/${url}`)
          .then((res) => res.json())
          .then((data) => data);
    
  • 方案2:修改Django路由规则去掉尾部斜杠
    找到urls.py中对应接口的路由定义,删除路径末尾的斜杠即可:
    # 修改前
    # path('ajax_vehical_types/', views.vehical_type_view, name='vehical_type'),
    # 修改后
    path('ajax_vehical_types', views.vehical_type_view, name='vehical_type'),
    
  • 方案3:关闭Django自动补全斜杠配置(不推荐)
    在项目settings.py中添加如下配置,全局关闭自动补斜杠逻辑,修改后所有路由都需要和请求路径完全匹配才会响应:
    APPEND_SLASH = False
    
注意事项
  • 301重定向会被浏览器长期缓存,修改配置后需要清空浏览器缓存或者使用无痕模式测试,避免旧的重定向规则残留影响验证结果。
  • 原代码中使用map遍历仅做参数拼接属于不合理用法,map设计用途是生成新数组,纯遍历副作用请使用forEach。

内容的提问来源于stack exchange,提问作者Vignesh N U

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:15:05