如何从if语句内的变量传递上下文变量?



在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_orderif语句的分支中声明,但在该分支之外引用-它不在范围内,因此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}

最新更新