Django项目views与urls配置异常:FruitModel无对象及URL显示问题排查
FruitModel 报不存在对应对象的问题修复
- 核心bug出在
FruitIDView的查询逻辑:你写的FruitModel.objects.get(name = f'{fruits.name}')代码里,fruits变量在执行这行查询时完全没有被赋值,根本取不到有效查询值,自然会抛对象不存在的错误。这个视图已经通过入参接收了URL传递的name参数,直接用这个入参做查询条件即可。 - 你提到已经执行创建语句但查不到数据,排查两个常见原因:
- 执行
record = FruitModel.objects.create(name='banana', price='4.00')的运行环境和Django服务连接的数据库不是同一个:如果没在项目激活虚拟环境、没进入python manage.py shell执行创建语句,很容易把数据写到独立的测试库文件里,不是项目实际使用的数据库。 - 创建语句没有实际落库:如果
FruitModel的price字段是Decimal类型,你直接传字符串'4.00'可能触发字段校验错误,创建流程静默失败,你没有看到终端的报错提示。
- 执行
- 注意
FruitModel.objects.get()的特性:只要匹配不到唯一结果就会抛出DoesNotExist异常,建议给查询逻辑加异常捕获,避免用户访问不存在的水果路径时直接触发500报错。
修正后的FruitIDView代码:def FruitIDView(request, name): try: fruits = FruitModel.objects.get(name=name) except FruitModel.DoesNotExist: return HttpResponse("未查询到对应水果信息", status=404) html = f'<h2>{fruits.name}</h2><br>' return HttpResponse(html, status=200)
URL无法正常访问的问题修复
- 目前你的urls.py配置里根本没有注册
FruitIDView对应的路由,写好的视图没有匹配的URL规则,访问对应路径一定会触发404。 - Django 3.2及以上版本已经弃用
django.conf.urls.url的写法,统一使用path()配置路由能减少正则匹配带来的异常。 - 配置路由时需要显式声明路径参数的匹配规则,把URL里的水果名称传递给视图。
修正后的urls.py配置:from django.contrib import admin from django.urls import path from catalog import views urlpatterns = [ path('admin/', admin.site.urls), path('FruitView/', views.FruitView), # 新增详情页路由,用<str:name>匹配路径中的水果名称参数 path('FruitView/<str:name>/', views.FruitIDView), ]
排查小技巧:可以把FruitModel注册到Django admin站点,启动服务后进入后台直接查看数据库里的实际记录,快速排除“以为创建成功但实际没落库”的问题,比手动写查询代码验证效率高很多。
内容的提问来源于stack exchange,提问作者Lilly Mayo-099
相关产品推荐
相关产品推荐

