添加else条件后for循环异常:Django wiki应用新建页面查重功能失效
问题根因
你编写的分支逻辑位置错误,将else和循环内的if进行了绑定,导致遍历首个词条后就会直接返回结果:
- 只有词条列表第一个条目刚好和用户提交的标题匹配时,才会触发错误提示
- 只要第一个条目不匹配,就会直接走
else返回成功提示,不会继续遍历后续的词条,因此大部分重复标题都无法被检测到
修复方案
你可以利用Python for循环自带的else分支特性实现需求:该分支仅在循环完整执行、没有被return/break提前中断时才会触发,刚好匹配「遍历完全部词条都没有重复,再执行新增逻辑」的场景。
修正后的代码如下:
def new_page(request): if request.method == "POST": title = request.POST.get("title") entries = util.list_entries() for entry in entries: if title.lower() == entry.lower(): return HttpResponse(f"ERROR: {entry} Already Exists") # else和for同级对齐,而非和循环内的if对齐 else: return HttpResponse("Thank you for your contribution!") else: return render(request,"encyclopedia/new_page.html")
如果你觉得for循环的else分支可读性不高,也可以直接在循环结束后返回成功提示,效果完全一致:
def new_page(request): if request.method == "POST": title = request.POST.get("title") entries = util.list_entries() for entry in entries: if title.lower() == entry.lower(): return HttpResponse(f"ERROR: {entry} Already Exists") # 循环没有被提前中断,说明无重复标题 return HttpResponse("Thank you for your contribution!") else: return render(request,"encyclopedia/new_page.html")
内容的提问来源于stack exchange,提问作者user17470872
相关产品推荐
相关产品推荐

