所以在我的代码中,
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块中声明它但不验证订单。
答案 0 :(得分: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中处理表单的正确方法。 我希望您已阅读this。当表单有效且您成功时 创建订单时,应将用户重定向到其他视图。
答案 1 :(得分: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 = ...