В update_cart
, если исключение возникает во время product = Product2.objects.get(slug = slug)
, то product
не будет определено, а строка if not product in cart.products.all()
повысит UnboundLocalError
.
. Вы можете исправить это с помощью только с использованием следующего кода, который использует product
, если не было сгенерировано исключение:
def update_cart(request, slug):
cart = Cart.objects.all()[0]
try:
product = Product2.objects.get(slug = slug)
except Product2.DoesNotExist:
pass
else:
if not product in cart.products.all():
cart.products.add(product)
else:
cart.products.remove(product)
return HttpResponseRedirect(reverse("cart"))
Предложение else
для try/except
здесь будет выполнено только в том случае, если код внутри кода не сгенерировал никаких исключений try
, что означает, что вы не будете пытаться использовать product
, если он не был успешно определен.
В качестве примечания, я рекомендую избегать использования except
, поскольку это может замаскировать любые проблемы / прерывания, возникающие во время выполнения вашего кода (см. этот вопрос ).