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/)拼接该相对路径,最终就会带上多余前缀。
解决方法
有两种规范的处理方式:
- 使用绝对路径:在路径前添加斜杠
/,让跳转从域名根目录开始:return HttpResponseRedirect('/folder/'+str(folder_id)+'/') - 使用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
相关产品推荐
相关产品推荐

