当我添加else条件时,我的for循环停止工作



我正在尝试定义一个函数,以便在wiki应用程序中创建一个新页面。用户应提供标题和内容。如果该标题已存在于列表中,则用户应收到一条错误消息。如果没有,则应将新条目及其内容保存在列表中。

这是我到目前为止的代码:

def new_page(request):
if request.method == "POST":
title = request.POST.get("title")
entries = util.list_entries() #this function is already defined and it returns a list of all names of encyclopedia entries.
for entry in entries:
if title.lower() == entry.lower():
return HttpResponse(f"ERROR: {entry} Already Exists")
else:
return render(request,"encyclopedia/new_page.html")

上面的代码运行良好,当我输入现有标题时,我会收到错误消息。

当我添加其他条件时,问题就开始了。这里有一个例子(对于只是尝试代码,我还不想保存内容。(

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:
return HttpResponse("Thank you for your contribution!")
else:
return render(request,"encyclopedia/new_page.html")

现在,即使我输入现有的标题,我也会得到";感谢您的贡献&";。我不知道是什么原因造成了这个问题。你能帮忙吗?

new_page.html:

{% extends "encyclopedia/layout.html" %}
{% block title %}
Create New Page
{% endblock %}
{% block body %}
<h1>Create Your Entry</h1>
<form action="{% url 'new_page' %}" method="POST">
{% csrf_token %}
<input type="text" name="title" placeholder="Title" style="width: 200px; text-align: center;">
<textarea name="new_entry" id="new_entry" cols="30" rows="10"></textarea>
<input type="submit" name="save_entry" id="save_entry" value="Save">
</form>
{% endblock %}

return导致函数在循环的第一次迭代中退出,但该循环未命中。您必须将return语句向上移动两个级别,如下所示:

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")
# the loop is finished and did not find an existing entry, return success
return HttpResponse("Thank you for your contribution!")
else:
return render(request,"encyclopedia/new_page.html")

您应该将页面是否已经存在保存在一个变量中,如下所示:

def new_page(request):
if request.method == "POST":
title = request.POST.get("title")
entries = util.list_entries()
pageExists=False
for entry in entries:
if title.lower() == entry.lower():
pageExists=True
if pageExists:
return return HttpResponse(f"ERROR: {entry} Already Exists")
else:
return HttpResponse(f"ERROR: {entry} Already Exists")
else:
return render(request,"encyclopedia/new_page.html")
函数退出是因为for循环中else中的return语句。

最新更新