Django — простая форма поиска

#python #django

#python #django

Вопрос:

Используя Django 1.9 с Python 3.5, я хотел бы создать простую форму поиска:

views.py

 from django.views import generic
from django.shortcuts import render
from .models import Movie, Genre

class IndexView(generic.ListView):
    template_name = 'movies/index.html'
    page_template = 'movies/all_movies.html'
    context_object_name = 'all_movies'
    model = Movie

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context.update({
            'all_genres': Genre.objects.all(),
            'page_title': 'Latest'
        })
        return context

    def get_queryset(self):
        query = request.GET.get('q')
        if query:
            return Movie.objects.filter(title__icontains=query)
        else:
            return Movie.objects.all()
  

форма

 <form method="GET" action="" id="searchform">
    <input class="searchfield" id="searchbox" name="q" type="text" value="{{ request.GET.q }}" placeholder="Search..."/>
</form>
  

По какой-то причине я продолжаю получать сообщение об ошибке:

имя «запрос» не определено

Я не совсем уверен, что я делаю не так, любая помощь будет оценена.

Ответ №1:

Эта ошибка не исходит из вашего шаблона, как вы, кажется, думаете. Это исходит из вашего представления

 def get_queryset(self):
    query = request.GET.get('q')
  

Это должно быть

     query = self.request.GET.get('q') 
  

Комментарии:

1. Как я могу добавить проверку в текстовое поле? Я хочу выдать предупреждение, если кто-то нажмет на кнопку поиска, пока текстовое поле пустое.

2. required = True