首页 文章

如何在if语句中设置变量并返回函数?

提问于
浏览
0

我想设置一个变量:correct_captcha,在if语句中将它从函数返回给HTML,视图如下:

def list(request):
        correct_captcha = None
        if request.method == 'POST':
            file = request.FILES.get('file', False)
            ca_mode = request.POST.get('mode', 'word').lower()
            assert ca_mode in ['number', 'word', 'four_number']
            captcha = request.POST.get('captcha')
            ca = Captcha(request)
            if ca.validate(captcha):
                if 'file' in request.FILES:
                    fs = FileSystemStorage()
                    fs.save('(' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + 
                            ')' + file.name, file)
                    filesname= str('(' + datetime.now().strftime('%Y-%m-%d-%H-
                            %M-%S') + ')' + file.name)
                else:
                    filesname = ''
                add_obj = enquiry(file=filesname)
                add_obj.save()
                correct_captcha = 0
                return correct_captcha
            else:
                correct_captcha = 1
                return correct_captcha
        return render(request, 'list.html', {'correct_captcha':correct_captcha})

但是它不起作用,我怎么能在函数中返回这个变量呢?

2 回答

  • 1

    我认为这是因为你的退货声明 . 你不需要在if else部分使用它 .

    return语句会导致函数退出并将值传回其调用者 . 当函数准备好向其调用者返回值时,将使用return语句 .

    请看here

    更改您的代码如下(我们需要删除return correct_captcha)

    def list(request):
        correct_captcha = None
        if request.method == 'POST':
            file = request.FILES.get('file', False)
            ca_mode = request.POST.get('mode', 'word').lower()
            assert ca_mode in ['number', 'word', 'four_number']
            captcha = request.POST.get('captcha')
            ca = Captcha(request)
            if ca.validate(captcha):
                if 'file' in request.FILES:
                    fs = FileSystemStorage()
                    fs.save('(' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + 
                            ')' + file.name, file)
                    filesname= str('(' + datetime.now().strftime('%Y-%m-%d-%H-
                            %M-%S') + ')' + file.name)
                else:
                    filesname = ''
                add_obj = enquiry(file=filesname)
                add_obj.save()
                correct_captcha = 0
            else:
                correct_captcha = 1
    
            # edit: return moved inside the if condition
            # avoids local variable referenced before assignment error
            return render(request, 'list.html', {'correct_captcha':correct_captcha})
        return render(request, 'list.html')
    
  • 1
    def list(request):
            correct_captcha = None
            if request.method == 'POST':
                file = request.FILES.get('file', False)
                ca_mode = request.POST.get('mode', 'word').lower()
                assert ca_mode in ['number', 'word', 'four_number']
                captcha = request.POST.get('captcha')
                ca = Captcha(request)
                if ca.validate(captcha):
                    if 'file' in request.FILES:
                        fs = FileSystemStorage()
                        fs.save('(' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + 
                                ')' + file.name, file)
                        filesname= str('(' + datetime.now().strftime('%Y-%m-%d-%H-
                                %M-%S') + ')' + file.name)
                    else:
                        filesname = ''
                    add_obj = enquiry(file=filesname)
                    add_obj.save()
                    correct_captcha = 0
                    return render(request, 'list.html', {'correct_captcha':correct_captcha})
                else:
                    correct_captcha = 1
                    return render(request, 'list.html', {'correct_captcha':correct_captcha})
            return render(request, 'list.html')
    

    在django如果你想发送一些 variabletemplate 你不能做 return ,因为你需要发送它作为 dictionary context ,所以在视图中尝试上面的代码

相关问题