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