Не могу разобраться с логикой цикла for

Я пытаюсь написать код, в котором пользователь вводит запрос на поиск в вики. Если запрос находится в заданном списке записей, пользователь должен быть перенаправлен на страницу соответствующей записи. Если запрос не соответствует названию записи, но является подстрокой какой-либо записи, пользователь должен быть перенаправлен на страницу со списком связанных записей. Моя проблема в том, что я не смог понять, как логически реализовать операторы возврата.

Код ниже работает нормально:

def search(request):
    sub_list = []
    entries = util.list_entries()
    search = request.GET.get("q")

    for entry in entries:
        if search.lower() == entry.lower():
            return redirect("entry", title= search)
        elif search.lower() in entry.lower():
            sub_list.append(entry)
    return render(request, "encyclopedia/search.html",{
        "title":search,
        "sub_list":sub_list
    })

Но когда я пытаюсь добавить еще одно условие для случая, когда запрос не соответствует названию записи, либо он всегда возвращает "Not Found":

    for entry in entries:
        if search.lower() == entry.lower():
            return redirect("entry", title= search)
        else:
            if search.lower() in entry.lower():
                sub_list.append(entry)
                return render(request, "encyclopedia/search.html",{
                    "title":search,
                    "sub_list":sub_list
                })
        return HttpResponse("Not Found")

или возвращает только первое совпадение подстроки:

    for entry in entries:
        if search.lower() == entry.lower():
            return redirect("entry", title= search)
        else:
            if search.lower() in entry.lower():
                sub_list.append(entry)
                return render(request, "encyclopedia/search.html",{
                    "title":search,
                    "sub_list":sub_list
                })
    return HttpResponse("Not Found")
Вернуться на верх