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

Django更新数据库后重定向至单车详情页失败求助

问题原因与解决方法

你犯的核心错误是把Django URL配置里的**模式占位符<int:bike_id>**直接当成真实路径传给redirect()函数——<int:bike_id>是Django路由系统用来匹配请求的规则,不是浏览器能识别的实际URL路径,自然会出现路径不匹配的错误。

快速修复:直接拼接真实路径

把重定向语句里的占位符换成实际的bike_id变量值,用字符串格式化生成正确的URL:

def bikes_update(request, bike_id):
    if request.method != 'POST' or 'user_id' not in request.session:
        return redirect("/")
    Bike.objects.filter(id=bike_id).update(
        name = request.POST['bike_name'],
        model = request.POST['model_id'],
    )
    # 用实际的bike_id拼接路径,注意末尾斜杠要和你的URL配置一致
    return redirect(f'/bikes/{bike_id}/')

更规范的写法:使用URL反向解析(推荐)

直接拼接路径不够灵活,万一以后修改URL规则,所有硬编码的地方都要同步修改。更好的方式是给详情页URL起个名称,用反向解析生成路径:

  1. 先在urls.py里给单车详情页的URL配置添加name参数:
# urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 其他URL配置...
    path('bikes/<int:bike_id>/', views.bikes_detail, name='bike_detail'),
]
  1. 在视图里用reverse或者直接给redirect()传名称和参数:
from django.urls import reverse

def bikes_update(request, bike_id):
    if request.method != 'POST' or 'user_id' not in request.session:
        return redirect("/")
    Bike.objects.filter(id=bike_id).update(
        name = request.POST['bike_name'],
        model = request.POST['model_id'],
    )
    # 方法1:用reverse生成URL再重定向
    return redirect(reverse('bike_detail', args=[bike_id]))
    # 方法2:redirect支持直接传URL名称和参数,写法更简洁
    # return redirect('bike_detail', bike_id)

这样不管以后怎么修改URL路径,只要name参数不变,代码就无需调整,更符合Django的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:45:34