python - 电子商务网站 - 在 Django 中更新购物车项目
问题描述
/cart/ 处的 UnboundLocalError - 来自网站 carts/views.py 的错误消息”,**第 24 行,如果 cart.products.all() 中没有产品,则在 update_cart 中:UnboundLocalError:分配前引用的局部变量“产品”
这是我在我的网站上单击“添加到购物车”按钮时收到的错误消息。** - 终端中的错误消息
views.py - 这是我对购物车的看法。据我了解,问题似乎在这个文件中。
from django.shortcuts import render, HttpResponseRedirect
from django.urls import reverse
# Create your views here
.
from fuisce.models import Product
from .models import Cart
def view(request):
cart = Cart.objects.all()[0]
context = {"cart": cart}
template = "cart/view.html"
return render(request, template, context)
def update_cart(request, product_id):
cart = Cart.objects.all()[0]
try:
product = Product.objects.get(product_id=product_id)
except Product.DoesNotExist:
pass
except:
pass
if not product in cart.products.all():
cart.products.add(product)
else:
cart.products.remove(product)
return HttpResponseRedirect(reverse('cart'))
***urls.py***
from django.urls import path
from . import views
from carts import views as cart_views
urlpatterns = [
path('cart/', cart_views.view, name='cart'),
path('cart/<product_id>', cart_views.update_cart, name='update_cart'),
]
***models.py - cart ***
from django.db import models
# Create your models here.
from fuisce.models import Product
class Cart(models.Model):
products = models.ManyToManyField(Product)
total = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
active = models.BooleanField(default=True)
def __string__(self):
return "Cart id: %s" %(self.id)
***models.py -Product***
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.
class Product(models.Model):
product_id = models.AutoField
product_name = models.CharField(max_length=50)
price = models.DecimalField(max_digits=10, decimal_places=2)
desc = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
active = models.BooleanField(default=True)
image = models.ImageField(upload_to='fuisce/images', default="")
def __str__(self):
return self.product_name
我相信这些文件包含问题,但通过在线研究,我似乎无法准确指出它是什么。我网站上的购物车一直在工作,直到我修改了我的 views.py 文件。任何帮助将不胜感激。
解决方案
我认为问题在于您product
在 try-except 块中声明变量,并且没有正确处理错误
def update_cart(request, product_id):
cart = Cart.objects.all()[0]
try:
product = Product.objects.get(product_id=product_id)
except Product.DoesNotExist:
product=None
print('Exception Occured')
except:
product=None
print('Exception Occured')
if not product in cart.products.all():
cart.products.add(product)
else:
cart.products.remove(product)
return HttpResponseRedirect(reverse('cart'))
推荐阅读
- python - 从数据集中过滤非“群组”
- c# - 如何配置简单注入器以在上下文事务中实现命令处理程序模式
- docker - 在 nginx prometheus 导出器中提供但未定义的标志
- excel-formula - 当值不应为零时,引用隐藏表的 Excel 公式返回零
- rabbitmq - 如何将 RabbitListener 绑定到同一交换机上的多个路由键
- javascript - 如何使用nodejs fs将数据从一个目录复制到另一个目录?
- scala - 为什么在这种更高种类的类型上调用 collect 时会丢失类型信息?
- java - Android sdk 文件损坏
- google-cloud-platform - 如何授予 Gsuite 组或用户模拟所有 Google 服务帐号的权限
- css - 无法在 iOS 上的 Angular 应用程序中制作粘性标题