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 语句的值没有返回到父函数的上下文视图的主要内容,如果未能解决你的问题,请参考以下文章

js笔记

动态单选按钮单选组和视图不起作用

Django之上下文处理器

TSQL 错误:不能在此上下文中使用具有返回值的 RETURN 语句

我如何在Django模板标签中使用模板上下文变量的值? [重复]

在此上下文中不能使用具有返回值的 RETURN 语句