NoReverseMatch в /search/ Обратный поиск для 'entry' не найден. 'entry' не является допустимой функцией представления или именем шаблона

NoReverseMatch at /search/ Обратное соответствие для 'entry' не найдено. 'entry' не является допустимой функцией представления или именем шаблона.

Я пытаюсь сделать поисковую систему для моего сайта на django, через views.py, но Django всегда говорит, что в views.py есть исключение

Views.py

def index(request):
return render(request, "encyclopedia/index.html", {
    "entries": util.list_entries()
})

def entries(request, entry):
  if entry not in util.list_entries():
        raise Http404
  content = util.get_entry(entry)
  return render(request,"encyclopedia/entry.html",
  {"title": entry, "content": Markdown().convert(content)},
   )

def search(request):
  query = request.GET.get("q", "")
  if query is None or query == "":
        return render(
              request,
              "encyclopedia/search.html",
              {"found_entries": "", "query": query},
        )

  entries = util.list_entries()

  found_entries = [
        valid_entry
        for valid_entry in entries
        if query.lower() in valid_entry.lower()
  ]
  if len(found_entries) == 1:
              return redirect("entry", found_entries[0])

  return render(
              request,
              "encyclopedia/search.html",
              {"found_entries": found_entries, "query": query},
  )

Но Django говорит: "if len(found_entries) == 1: return redirect("entry", found_entries[0]) есть ошибка "NoReverseMatch""

Urls.py

from django.urls import path
from . import views, util

urlpatterns = [
    path("", views.index, name="index"),
    path("entries/<str:entry>", views.entries, name="entries/{{ entry }}"),
    path("search/", views.search, name="search"),
]

handler404 = 'encyclopedia.views.error_404_view'

Layout.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
    <body>
        <div class="row">
            <div class="sidebar col-lg-2 col-md-3">
                <h2>Wiki</h2>
                <form action="{% url 'search' %}">
                    <input class="search" type="text" name="q" placeholder="Search 
Encyclopedia">
                </form>
                <div>
                    <a href="{% url 'index' %}">Home</a>
                </div>
                <div>
                    Create New Page
                </div>
                <div>
                    Random Page
                </div>
                {% block nav %}
                {% endblock %}
            </div>
            <div class="main col-lg-10 col-md-9">
                {% block body %}
                {% endblock %}
            </div>
        </div>
    </body>
</html>

Я пробовал много вещей, но ничего не исправил, как я могу позволить моей странице работать хорошо?

Вы должны изменить имя вашего url в urls.py на entry:

path("entries/<str:entry>", views.entries, name="entry"),

И вы должны передать аргумент в вашем файле views.py как:

return redirect("entry", entry=found_entries[0])

Смотрите https://docs.djangoproject.com/en/4.0/topics/http/shortcuts/#redirect

Вернуться на верх