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

如何在Django的views.py中实现带有int类型参数的URL重定向?

解决Django带Int参数的重定向问题

嘿,我来帮你搞定这个重定向的坑!你现在的问题主要是没搞清楚Django URL反向解析的正确用法,而且代码里还有几个小笔误得先修正,咱们一步步来:

首先,先修正代码里的小错误

你的视图函数参数是user_id,但在else分支里写了user = User.objects.get(id=job_id)——这里的job_id明显是笔误,应该改成user_id,不然会报变量未定义的错误。另外,错误分支里你并没有获取user对象,所以user.id根本没法用,直接用视图传入的user_id就够了。

正确的重定向写法(两种方案)

你的urls.py里配置了'edit/<int:user_id>',对应views.update(你之前说对应views.edit,这里得保持一致哦),下面两种方法都能解决你的问题:

方案1:使用命名URL(推荐,维护更方便)

首先给你的URL路径加个name,这是Django推荐的反向解析方式,以后改URL路径不用改视图代码:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 给这个路径加上name='update_user'
    path('edit/<int:user_id>', views.update, name='update_user'),
    # 其他URL...
]

然后在视图里,用redirect配合这个name和参数:

# views.py里的错误分支
return redirect('update_user', user_id=user_id)
# 或者直接传位置参数,效果一样:return redirect('update_user', user_id)

方案2:直接拼接URL字符串(不推荐,但能临时解决)

如果你不想用命名URL,那得用f-string把user_id的实际值拼进URL里,注意不要写int:,因为那是Django URL配置里的语法,不是实际浏览器访问的URL内容:

return redirect(f'/edit/{user_id}')

修正后的完整视图代码

把上面的修改整合后,你的update函数应该是这样的:

def update(request, user_id):
    errors = User.objects.empty_validator(request.POST)
    if len(errors):
        for key, value in errors.items():
            messages.error(request, value)
        # 这里用推荐的命名URL反向解析
        return redirect('update_user', user_id=user_id)
        # 或者用拼接URL的方式:return redirect(f'/edit/{user_id}')
    else:
        if 'user_id' in request.session:
            # 修正job_id为user_id
            user = User.objects.get(id=user_id)
            user.title = request.POST['title']
            user.save()
            return redirect('/dashboard')
        return redirect('/')

为什么你之前的写法无效?

你试的redirect('/edit/int:user_id')、('/edit/int:user.id')这些写法都是错的:

  • int:是Django URLconf里的路径转换器,用来告诉Django匹配整数类型的参数,不是实际URL的一部分,浏览器请求的URL里是具体的数字(比如/edit/1),所以写int:会导致路径找不到。
  • 错误分支里你没有获取user对象,所以user.id会直接报错,即使获取了,也不如直接用视图传入的user_id简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:42:30