我有一个Django应用程序,用于检查数据库是否包含与表单中用户输入的数字相匹配的数字。我设法让它重定向到“你赢了”#39;页面如果匹配,但当它们不匹配时,只会出现错误,说“匹配查询不存在。”#39;这是我在view.py文件中使用的if / else语句:
if Numbers.objects.get(numbers_win = user_number):
return HttpResponseRedirect('win')
else:
return HttpResponseRedirect('lose.html')
答案 0 :(得分:3)
那是因为.get
在没有匹配时抛出异常 - 它不会返回虚假的内容。
您有两种选择:
首先,您可以使用filter
和exists
代替get
,如果找到了某些内容,则会返回True
,否则会返回False
。
如果你没有使用结果,这可能是最好的解决方案:
if Numbers.objects.filter(numbers_win = user_number).exists():
return HttpResponseRedirect('win')
else:
return HttpResponseRedirect('lose.html')
(如评论中所述,using exists
is faster if you're just checking for existence)
其次,您可以捕获异常,而不是使用if
/ else
:
try:
Numbers.objects.get(numbers_win = user_number)
except Numbers. DoesNotExist:
return HttpResponseRedirect('lose.html')
else:
return HttpResponseRedirect('win')
正如您所看到的,这会使代码变得有些尴尬,并且它的性能也比使用.exists
差,所以您可能不应该这样做。