У меня есть код, чтобы окно поиска выполняло следующие действия:
Поиск: Разрешить пользователю вводить запрос в поле поиска на боковой панели для поиска записи энциклопедии. Если запрос совпадает с именем записи энциклопедии, пользователь должен быть перенаправлен на страницу этой записи. Если запрос не совпадает с названием записи энциклопедии, вместо этого пользователя следует перенаправить на страницу результатов поиска, на которой отображается список всех статей энциклопедии, в которых запрос является подстрокой. Например, если поисковый запрос был Py, то в результатах поиска должно появиться Python. Щелчок по любому имени записи на странице результатов поиска должен перенаправить пользователя на страницу этой записи.
это код, который у меня есть:
views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
from . import util
from django.urls import reverse
def index(request):
return render(request, "encyclopedia/index.html", {
"entries": util.list_entries()
})
def wiki(request, title):
return render(request, "encyclopedia/wiki.html", {
"entries": util.get_entry(title)
})
def search(request):
entries = util.list_entries()
query = request.session['query']
find_entries = list()
search_box = request.POST.get("q", "").capitalize()
if search_box in entries:
return HttpResponseRedirect(f"wiki/{search_box}")
for entry in entries:
if re.search(query, entry):
find_entries.append(entry)
if find_entries:
return render(request, "encyclopedia/search.html", {
"search_result": find_entries,
"search": search_box
})
urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("wiki/<str:title>", views.wiki, name="wiki"),
path("search", views.search, name="search"),
]
Я получаю эту ошибку:
ОБНОВЛЕННАЯ ОШИБКА: KeyError в / search 'query'
util.py (у меня нет settings.py)
import re
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
def list_entries():
"""
Returns a list of all names of encyclopedia entries.
"""
_, filenames = default_storage.listdir("entries")
return list(sorted(re.sub(r"\.md$", "", filename)
for filename in filenames if filename.endswith(".md")))
def save_entry(title, content):
"""
Saves an encyclopedia entry, given its title and Markdown
content. If an existing entry with the same title already exists,
it is replaced.
"""
filename = f"entries/{title}.md"
if default_storage.exists(filename):
default_storage.delete(filename)
default_storage.save(filename, ContentFile(content))
def get_entry(title):
"""
Retrieves an encyclopedia entry by its title. If no such
entry exists, the function returns None.
"""
try:
f = default_storage.open(f"entries/{title}.md")
return f.read().decode("utf-8")
except FileNotFoundError:
return None
Пожалуйста, помогите