【问题标题】:local variable 'items' referenced before assignment django在赋值 django 之前引用的局部变量“items”
【发布时间】:2016-07-18 15:20:46
【问题描述】:

我有一个视图,即在会话中为每个用户显示购物车中的项目。

这里是

def cart(request):
    if request.method == "POST":
        print "rp ", request.POST
        description = request.POST['description']
        print "Description is ", description
        price = request.POST['price']
        print "Price is ", price
        quantity = request.POST['quantity']
        print "Quantity is ", quantity
        client = request.user
        print "Client is ", client

        # items =  Cart.objects.get_or_create(client="client", description="description", price="price", quantity="quantity")
        item, created = Cart.objects.get_or_create(client=client, description=description, price=price, quantity=quantity)
        item.save()

        try:
            items = Cart.objects.get(client=user)
            print "ITEMS", items
        except ObjectDoesNotExist:
            items = None
    # return HttpResponseRedirect('/selly/cart/')
    return render(request, 'selly/cart.html', {'items': items})

我得到的结果是 “分配前引用的局部变量‘items’”。它指向 return render(request, 'selly/cart.html', {'items': items})

迷茫

【问题讨论】:

  • items 具有误导性,因为您只能使用 get 退回一件商品
  • 我将查询置于 if 块之外,得到的错误是全局名称 'user' 未在“items = Cart.objects.get(client=user)”中定义

标签: django


【解决方案1】:

您的 item 变量仅在 if request.method == "POST" 块中初始化,但如果您没有 POST 方法,则变量 item 永远不会初始化,因此当您调用 render... 时,item 变量是未定义的。

最简单的解决方案是在if 块之外进行项目查询。

【讨论】:

  • 我将查询置于 if 块之外,得到的错误是全局名称 'user' 未在“items = Cart.objects.get(client=user)”中定义
  • 错误再清楚不过了,你没有名为user的变量,那代码怎么可能有效?
  • 用户来自 django 用户模型,我打算获取属于登录的特定用户的所有项目
  • 那么它是request.user 而不是user。我建议你在进入 django 之前学习更多的 python 基础知识,这样可以节省你在此类问题上的时间。
【解决方案2】:

这是一个简单的解决方案,您必须将 client=user 更改为 client=request.user 像这样 尝试: 项目 = Cart.objects.get(client= request.user) 打印“项目”,项目 除了 ObjectDoesNotExist: 项目 = 无 # return HttpResponseRedirect('/selly/cart/') return render(request, 'selly/cart.html', {'items': items})

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 2022-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2020-05-05
    • 2020-08-22
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多