我在Django搜索功能中遇到问题

时间:2020-05-29 17:37:36

标签: django search

我的搜索功能有问题。 他的任务是按名字搜索电影 而且我不知道该怎么写

我的观点:

class AllMovies(ListView):
    model = Movie
    template_name = 'All_movies.html'
    cats = Category.objects.all()


    def get_context_data(self, *args, **kwargs):
        cat_menu = Category.objects.all()
        search_term = ''
        context = super(AllMovies, self).get_context_data(*args, **kwargs)
        context["cat_menu"] = cat_menu
        return context

    def search(request):  # wszytskie filmy (lista)
        movier = Movie.objects.all()

        search_term = ''
        if 'search' in request.GET:
            search_term = request.GET['search']
            movier = Movie.objects.filter(name__icontains=search_term)
        paginator = Paginator(movier, 30)
        page = request.GET.get('page')
        movier = paginator.get_page(page)
        get_dict_copy = request.GET.copy()
        params = get_dict_copy.pop('page', True) and get_dict_copy.urlencode()

        return render(request, 'AllMovies.html',
              {'movie': movie, 'params': params, 'search_term': search_term})

在这里,应该将两个功能分开并合并,但是我不知道如何

我的网址:

   path("AllMovies/", AllMovies.as_view(), name="AllMovies"),

我的模板:

    <form class="form-inline">
             <input class="form-control mr-sm-2 " align="middle" type="search" placeholder="Name Movie"
                     aria-label="Search" name='search' value = "{{ search_term }}">
              <button class="btn btn-success my-2 my-sm-0" type="submit">Search</button>
     </form>

最重要的是让搜索引擎正常工作。 救救我!

2 个答案:

答案 0 :(得分:1)

ListView不会查看方法search,无论您写什么内容,都不会被触发。

您可以通过覆盖.get_queryset(…) method [Django-doc]来过滤要返回的对象列表:

class AllMovies(ListView):
    model = Movie
    template_name = 'All_movies.html'
    paginate_by= 30
    context_object_name = 'movie'

    def get_context_data(self, *args, **kwargs):
        get_dict_copy = request.GET.copy()
        get_dict_copy.pop('page', True)
        return super().get_context_data(
            *args,
            **kwargs,
            cat_menu=Category.objects.all(),
            search_term=self.request.GET.get('search', '')
            params=get_dict_copy.urlencode()
        )

    def get_queryset(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        if 'search' in self.request.GET:
            search_term = self.request.GET['search']
            return qs.filter(name__icontains=search_term)
        return qs

答案 1 :(得分:0)

这是一种在ListView中实现搜索以获取queryset参数的方法:

response.xpath('//script[last()]/text()').extract()
相关问题