Django重定向传递数据至新视图失败,request.GET为空QueryDict
Django redirect传递GET参数失败的解决方法
你的问题出在redirect()函数的用法上,当前代码里的第二个参数{'email_id':email}并没有被当作GET参数附加到URL上,而是被当成了URL反转时的命名参数(若使用URL名称的情况),但你直接写了路径/content/,所以这个字典完全没起作用。
正确实现方式有两种:
1. 直接拼接GET参数到URL路径
修改add_prompt视图:
def add_prompt(request): email='abc@gmail.com' return redirect(f'/content/?email_id={email}')
2. 使用reverse生成URL并传递参数(更推荐,符合Django最佳实践)
先在urls.py里给content视图命名:
# urls.py from django.urls import path from . import views urlpatterns = [ path('content/', views.content, name='content'), # 其他URL配置... ]
然后修改add_prompt视图:
from django.urls import reverse def add_prompt(request): email='abc@gmail.com' return redirect(reverse('content') + f'?email_id={email}')
或是用redirect的参数传递方式(需对应调整URL配置):
from django.urls import reverse def add_prompt(request): email='abc@gmail.com' return redirect('content', email_id=email)
这种方式要求你的URL配置包含对应参数:
path('content/<str:email_id>/', views.content, name='content'),
此时content视图需通过参数接收:
def content(request, email_id): print(email_id) return render(request,'abd/content.html')
验证效果
修改后再访问add_prompt视图,content视图里的request.GET就能正确获取到email_id参数,request.GET.get('email_id')会返回abc@gmail.com。
内容的提问来源于stack exchange,提问作者Akhand Chaurasia
相关产品推荐
相关产品推荐

