在if语句中,我有check_order
,我需要作为模板的上下文变量,我得到了这个traceback: local variable 'check_order' referenced before assignment
。我如何拥有它作为一个上下文变量,而不必重复代码有它外面的if语句?
视图
if request.method == "POST":
if request.user.is_authenticated:
customer = request.user.customer
check_order = OrderItem.objects.filter(order__customer=customer)
if check_order:
if form.is_valid():
#does logic
else:
messages.error(request, f"Failed")
else:
return redirect()
context = {"check_order": check_order}
这是因为变量的作用域。check_order
在if
语句的分支中声明,但在该分支之外引用-它不在范围内,因此Python抛出错误,让您知道在定义它之前正在使用它。
你可以在这里阅读更多关于Python作用域的信息:https://realpython.com/python-scope-legb-rule/.
下面的代码将解决您的问题:
# Declare check_order with no value but in the same scope it is referenced
check_order = None
if request.method == "POST":
if request.user.is_authenticated:
customer = request.user.customer
check_order = OrderItem.objects.filter(order__customer=customer)
if check_order:
if form.is_valid():
#does logic
else:
messages.error(request, f"Failed")
else:
return redirect()
context = {"check_order": check_order}