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

2024-09-28 19:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在if语句中设置一个变量:correct\u captcha,并将其从函数返回到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})

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


Tags: 函数getreturnifmoderequestfilespost
2条回答

我想是因为你的回执。你不需要把它放在if-else部分。你知道吗

The return statement causes your function to exit and hand back a value to its caller. The return statement is used when a function is ready to return a value to its caller.

请看一下here

更改您的代码如下(我们需要删除返回正确的\u验证码)

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')
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中,如果您试图将一些variable发送到template,则无法执行return,因此您需要将其作为dictionarycontext发送,因此请在视图中尝试上面的代码

相关问题 更多 >