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

Django中redirect跳转未传递关键字参数问题求助

Django跨App重定向参数传递失败问题解决

问题描述

从一个App的视图重定向到另一个App的视图时,视图可正常访问,但无法传递参数,尝试位置参数和关键字参数均无效。

相关代码

登录视图代码:

if request.method == 'POST':
        username = request.POST['username']
        pass1 = request.POST['pass1']
        
        user = authenticate(username=username, password=pass1)
        if user is not None:
            login(request, user)
            print(user.username, type(user.username), file=sys.stderr)
            return redirect(reverse('homepage'), user.username)
        else:
            messages.error(request, "Bad Credentials!")
            return redirect('index')

目标视图代码:

@login_required()
def homepage(request, username=None):
    print(username, file=sys.stderr)
    try:
        user = userAttribute.objects.get(username=username)
    except userAttribute.DoesNotExist:
        
        return redirect("index")

日志信息

[14/Feb/2024 18:15:18] "GET /signin HTTP/1.1" 200 824
Kane <class 'str'>
[14/Feb/2024 18:15:23] "POST /signin HTTP/1.1" 302 0
None

问题原因

错误在于**redirect和reverse的用法搭配错误**:redirect的第二个参数是用于设置HTTP状态码的,并非URL路径参数。正确的做法是将参数传递给reverse函数,由它生成带参数的完整URL后再传给redirect。

同时需确保目标视图对应的URL路由已正确定义参数占位符,示例:

# 目标App的urls.py
path('homepage/<str:username>/', views.homepage, name='homepage')

修复方案

方案1:修正重定向代码

将重定向代码修改为以下两种方式之一:

方式1:使用位置参数args

return redirect(reverse('homepage', args=[user.username]))

方式2:使用关键字参数kwargs

return redirect(reverse('homepage', kwargs={'username': user.username}))

方案2:优化实现(无需传递参数)

由于已通过login(request, user)完成用户登录,目标视图可直接通过request.user获取当前登录用户信息,无需通过URL传递参数,更安全且代码更简洁:

修改目标视图:

@login_required()
def homepage(request):
    try:
        user = userAttribute.objects.get(username=request.user.username)
    except userAttribute.DoesNotExist:
        return redirect("index")

对应的URL路由简化为:

path('homepage/', views.homepage, name='homepage')

此时重定向代码只需写:

return redirect('homepage')

内容的提问来源于stack exchange,提问作者Caden The Yak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:22:46