Загрузить URL без поисковых запросов - PullRequest
0 голосов
/ 16 декабря 2018

DJANGO / PYTHON Я пытаюсь загрузить http://127.0.0.1:8000/catalog/. Если пользователь вводит данные на этой странице, форма отправляет запрос search_query в базу данных.Моя проблема в том, что http://127.0.0.1:8000/catalog/ не загружается - это приводит к типу исключения 'MultiValueDictKeyError' со значением исключения 'search_query'.Однако, когда пользователь отправляет данные в форму (т. Е. http://127.0.0.1:8000/catalog/?search_query=biography+of), страница загружается. Я пытаюсь сделать так, чтобы http://127.0.0.1:8000/catalog/ загружался без необходимости отправки поискового запроса пользователем.

Вот моя функция просмотра:

def index(request):
   . . .
     num_of_word = []
     bookInstance_titles = []
     bookInstance_ids = []
     num_of_word = BookInstance.objects.filter(status='a',      book__title__contains=request.GET['search_query']).count()
bookInstances = BookInstance.objects.filter(status='a', book__title__contains=request.GET['search_query'])
     for i in bookInstances:
        bookInstance_titles.append(str(i.book))
        bookInstance_ids.append(str(i.id))

    context = {
    . . .
    'num_of_word': num_of_word,
    'bookInstance_titles': bookInstance_titles,
    'bookInstance_ids': bookInstance_ids,
}

Я полагаю, что проблема в том, что переменные (num_of_word и bookInstances) пытаются получить доступ к запросу search_query, но / catalog / request не имеетпоисковый запрос. После исследования я все еще не уверен, как решить эту проблему.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Надеюсь, это сработает.Используйте ниже в соответствии с вашим кодом.

    if request.method == 'GET' and 'q' in request.GET: #q is search Input field reference 
        num_of_word = []
        bookInstance_titles = []
        bookInstance_ids = []
        num_of_word = BookInstance.objects.filter(status='a', book__title__contains=request.GET.get('search_query', '').count()
        bookInstances = BookInstance.objects.filter(status='a', book__title__contains=request.GET.get('search_query', ''))
        for i in bookInstances:
            bookInstance_titles.append(str(i.book))
            bookInstance_ids.append(str(i.id))
        context = {
            . . .
            'num_of_word': num_of_word,
            'bookInstance_titles': bookInstance_titles,
            'bookInstance_ids': bookInstance_ids,
        }
    else{
        context = {
             . . .
             'num_of_word': "", #What you want to pass
             'bookInstance_titles': "", #What you want to pass
             'bookInstance_ids': "",  #What you want to pass
        }
    }
0 голосов
/ 16 декабря 2018

вы пытаетесь получить доступ к GET-запросу, когда он не существует.Вы должны проверить, существует ли search_query в request.GET или просто использовать функцию .get.см. ниже:

def index(request):
     . . .
     num_of_word = []
     bookInstance_titles = []
     bookInstance_ids = []
     num_of_word = BookInstance.objects.filter(status='a', book__title__contains=request.GET.get('search_query', '').count()
     bookInstances = BookInstance.objects.filter(status='a', book__title__contains=request.GET.get('search_query', ''))
     for i in bookInstances:
         bookInstance_titles.append(str(i.book))
         bookInstance_ids.append(str(i.id))
    context = {
         . . .
         'num_of_word': num_of_word,
         'bookInstance_titles': bookInstance_titles,
         'bookInstance_ids': bookInstance_ids,
    }
...