Django中name 'classeproduto'未定义错误排查求助
Django NameError: name 'classeproduto' is not defined
问题原因
- 在
products/views.py中,你导入了models模块,但直接使用classeproduto而未通过models.前缀引用,Python无法识别该名称; - 第二个视图
produtoView中使用的produto类在你的models.py里不存在,实际应为classeproduto。
解决方案
可以通过两种方式修正视图中的模型引用问题,同时修正错误的模型名称:
方式1:直接导入模型类
修改products/views.py的导入部分,明确导入所需模型:
from django.shortcuts import render, get_object_or_404, redirect from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator from django.http import HttpResponse from django.contrib import messages from .models import classeproduto # 直接导入模型类 @login_required def ListagemProdutos(request): ListaItens = classeproduto.objects.all() return render(request, 'baselist.html', {'produtos': ListaItens}) @login_required def produtoView(request, id): item = get_object_or_404(classeproduto, pk=id) # 修正为正确的模型类名 return render(request, 'produto.html', {'produto': item})
方式2:通过models模块引用
保留原导入语句,使用models.前缀访问模型:
from django.shortcuts import render, get_object_or_404, redirect from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator from django.http import HttpResponse from django.contrib import messages from . import models @login_required def ListagemProdutos(request): ListaItens = models.classeproduto.objects.all() # 添加models.前缀 return render(request, 'baselist.html', {'produtos': ListaItens}) @login_required def produtoView(request, id): item = get_object_or_404(models.classeproduto, pk=id) # 修正模型类并添加前缀 return render(request, 'produto.html', {'produto': item})
额外建议
按照Django命名规范,模型类名应使用大驼峰命名法(比如ClasseProduto而非classeproduto),能提升代码可读性,也符合社区约定。
内容的提问来源于stack exchange,提问作者Elinton Soares
相关产品推荐
相关产品推荐

