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

Django HttpResponseRedirect重定向路径含多余前缀问题求助

Django重定向出现多余路径前缀问题

问题场景

以下代码用于判断条目是否存在于文件夹中,若存在则重定向到对应文件夹路径:

flag = 0
folder_id = 0
if FolderEntries.objects.filter(entry = entry_id).exists():
   print("=======================yes in folder")
   flag = 1
   folder_object = FolderEntries.objects.get(entry = entry_id)
   folder_entries_object = model_to_dict(folder_object)

   print("-------------------------", folder_entries_object)
   folder_id = folder_entries_object['folder']
else:
   flag = 0


if flag == 1:
   return HttpResponseRedirect('folder/'+str(folder_id)+'/')
else:
   if request.session.get('HTTP_REFERER', None):
       HTTP_REFERER = request.session.get('HTTP_REFERER')
       del request.session['HTTP_REFERER']
       return HttpResponseRedirect(HTTP_REFERER)
   return HttpResponseRedirect('editentry/'+str(entry_id))

当flag = 1时,实际重定向结果为http://127.0.0.1:8000/admin/form-entries/edit-entry/folder/174/,但需求是跳转至根目录下的folder/174/路径,当前结果多了admin/form-entries/edit-entry/前缀。

问题原因

你使用的是相对路径进行重定向,Django会基于当前请求的URL路径(即当前视图所在的/admin/form-entries/edit-entry/)拼接该相对路径,最终就会带上多余前缀。

解决方法

有两种规范的处理方式:

  1. 使用绝对路径:在路径前添加斜杠/,让跳转从域名根目录开始:
    return HttpResponseRedirect('/folder/'+str(folder_id)+'/')
    
  2. 使用URL反转(推荐):通过Django的reverse函数根据URL名称生成路径,避免硬编码路径,便于后续维护:
    • 先在项目urls.py中给文件夹视图的URL配置添加名称:
      from django.urls import path
      from . import views
      
      urlpatterns = [
          # 其他URL配置
          path('folder/<int:folder_id>/', views.your_folder_view, name='folder_detail'),
      ]
      
    • 在视图中导入reverse并使用:
      from django.urls import reverse
      
      # ... 其他代码 ...
      if flag == 1:
          return HttpResponseRedirect(reverse('folder_detail', args=[folder_id]))
      

内容的提问来源于stack exchange,提问作者Abhishek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:45:36