if 语句的值没有返回到父函数的上下文视图
Posted
技术标签:
【中文标题】if 语句的值没有返回到父函数的上下文视图【英文标题】:Value of an if statement is not returning to the context of the parent function the view 【发布时间】:2020-02-10 10:53:58 【问题描述】:这是我想在函数上下文中使用obj3
的视图
def inec_news_view(request):
title = 'LGA Results'
data1 = Lga.objects.all()
if request.method == 'POST':
selected_item = request.POST.get('item_id')
obj3 = Pu_results.objects.filter(polling_unit_uniqueid__in=Subquery(Unit.objects.values('uniqueid').filter(lga_id=obj1)))
context = 'title': title, 'data1': data1, 'resobj': obj3
return render(request, "inecnews.html", context)
【问题讨论】:
obj3
是一个局部变量。如果需要在其他函数中使用,则需要将其设为全局。
您遇到了什么错误?如果您正在使用 GET
方法,则需要为 GET
方法定义 obj3
,因为此变量当前未定义而无需调用 POST
,而您在任何情况下都将其放入上下文中。
看起来如果你发出一个GET请求,它会出错,因为那时obj3
没有定义。
谢谢大家,我解决了问题
@Barmar 请不要建议使用全局变量,特别是不要在 wsgi 程序中使用。作为一般规则,如果你想让一个局部变量在函数外部可访问,正确的方法是从函数中返回它(或者将它封装为对象或闭包的一部分),并且给定 wsgi 的执行模型,全局变量在wsgi 应用程序绝不应该用于共享全局状态。
【参考方案1】:
我是这样回答的
def inec_news_view(request): # *args, **kwargs
title = 'LGA Results'
data1 = Lga.objects.all()
context = 'title': title, 'data1': data1
if request.method == 'POST':
selected_item = request.POST.get('item_id')
obj = Lga.objects.get(lga_id=selected_item)
obj1 = obj.lga_id
obj3 = Pu_results.objects.filter(polling_unit_uniqueid__in=Subquery(Unit.objects.values('uniqueid').filter(lga_id=obj1)))
context = 'title': title, 'data1': data1, 'resobj': obj3
return render(request, "inecnews.html", context)
【讨论】:
以上是关于if 语句的值没有返回到父函数的上下文视图的主要内容,如果未能解决你的问题,请参考以下文章
TSQL 错误:不能在此上下文中使用具有返回值的 RETURN 语句