Django Поиск не работает для проекта 1, нужен код - PullRequest
0 голосов
/ 14 июля 2020

У меня есть код, чтобы окно поиска выполняло следующие действия:

Поиск: Разрешить пользователю вводить запрос в поле поиска на боковой панели для поиска записи энциклопедии. Если запрос совпадает с именем записи энциклопедии, пользователь должен быть перенаправлен на страницу этой записи. Если запрос не совпадает с названием записи энциклопедии, вместо этого пользователя следует перенаправить на страницу результатов поиска, на которой отображается список всех статей энциклопедии, в которых запрос является подстрокой. Например, если поисковый запрос был 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

Пожалуйста, помогите

1 Ответ

0 голосов
/ 15 июля 2020

Запустите makemigrations и выполните миграцию. Если не работает, удалите миграции, запустите makemigations и снова выполните миграцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...