【问题标题】:Creating a 'delete cart' button in django在 django 中创建一个“删除购物车”按钮
【发布时间】:2015-05-08 18:48:50
【问题描述】:

我正在尝试创建一个按钮(在用户端),用于删除/取消用户的购物车。

我可以做这样的事情吗?

views.py

def cancel_cart(request, id):

    try:
        the_id = request.session['cart_id']
        cart = Cart.objects.get(id=the_id)
    except:
        the_id = None

    cart.delete()
    messages.success(request, "You have cancelled your order.")
    return HttpResponseRedirect('profile.html')

【问题讨论】:

  • 您的代码存在几个问题。如果the_id 为None,则cart 变量将为None,它正在调用delete 方法。之后,HttpResponseRedirect 的参数应该是 url,而不是模板。除了profile.html 是你的网址。

标签: django django-views


【解决方案1】:

我想你可能想使用类似的东西:

from django.core.urlresolvers import reverse

def cancel_cart(request):
    cart_id = request.session.get('cart_id')
    if cart_id:
        try: # code defensively, even against yourself
            cart = Cart.objects.get(id=cart_id)
            cart.delete()
            messages.success(request, "You have cancelled your order.")
        except Cart.DoesNotExist:
            pass
    return HttpResponseRedirect(reverse('your_app:some_url_name'))

这样,只有在会话中存在cart_id 键时才会尝试删除,因为默认情况下.get() 返回None。您可以通过在检索 cart 实例时添加 try/except 处理来进一步防止错误,以防会话中不存在 id。

不确定为什么需要传入 id 来检索,因为您是从会话中获取它的。如果我猜它不在会话中,您可以将其设置为可选参数以删除特定的购物车对象。

【讨论】:

    猜你喜欢
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多