我想设置一个变量: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})
但是它不起作用,我怎么能在函数中返回这个变量呢?
答案 0 :(得分: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 :(得分: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')
如果您尝试将某些variable
发送到template
但您无法return
,请在django中,因为您需要将其作为dictionary
{{1}发送所以在视图中尝试上面的代码