0

所以在我的代码中,

if ...:
    if form.is_valid():
                order_created = create_order(request,item)
                order_number = order_created.id
                if order_number:
                    ....

context = {'total':order_created.total}

当我运行它时,我得到了unboundlocal error,local variable 'order_created' referenced before assignment。我环顾四周,learnt实际上我无法访问该块之外的块内的变量。我还了解到我不应该使用global statement. 我还能如何访问order_created,我可以在 if 块之外声明它,但这并不能验证订单。

4

2 回答 2

2

尽管您没有粘贴整个视图,但我很确定错误来自您没有考虑表单无效的事实

因此,当您在context字典上使用它时,order_created从未定义过。

因此,您应该执行以下操作:

if form.is_valid():
    order_created = ....
else:
    order_created = None

context = {'total': order_created.total if order_created else None}

编辑: 请记住,尽管这不是在 django 中处理表单的正确方法。我希望你已经阅读了这篇文章。当表单有效并且您成功创建订单时,您应该将用户重定向到不同的视图。

于 2013-04-30T12:37:24.580 回答
2

Python 作用域可能比其他结构化语言少面向块,只要代码路径实际通过该块,您就可以在块外访问该变量。例如,这将导致错误:

b = False
if b:
    x = 5
print x

但这不会,即使 x 在块外访问:

b = True
if b:
    x = 5
print x

诀窍是在进入块之前将变量设置为:

order_created = None
if ...:
    if form.is_valid():
        order_created = create_order(request,item)
        order_number = order_created.id
        if order_number:
                ....
if order_created is not None:
    context = {'total':order_created.total}
else:
    context = ...
于 2013-04-30T12:43:55.550 回答