【问题标题】:using filters with django-endless-pagination使用带有 django-endless-pagination 的过滤器
【发布时间】:2013-04-19 16:50:33
【问题描述】:

我正在使用 Django endles-pagination 以无限滚动的方式加载页面。我还有一些过滤器可以根据标准过滤数据(例如,根据价格进行价格滑块过滤)。现在当页面加载时,过滤器现在只从加载的页面中过滤,尽管我希望它从所有已经或将要加载的页面中过滤它。有没有办法做到这一点(通过发出一些 ajax 请求或其他方式)?

对此的任何帮助都会很棒。非常感谢。

【问题讨论】:

    标签: django django-endless-pagination jquery-filter


    【解决方案1】:

    要过滤数据,您必须在请求过滤查询的视图中重新定义 get_queryset() 方法。

    例如,我请求模板中的当前语言以根据语言过滤博客文章:

    class Blog(AjaxListView):
        context_object_name = "posts"
        template_name = 'cgapp/blog.html'
        page_template = 'cgapp/post_list.html'
    
    def get_queryset(self):
        if self.request.LANGUAGE_CODE == 'en': #request value of the current language
            return News.objects.filter(language='en') #return filtered object if the current language is English
        else:
            return News.objects.filter(language='uk')
    

    要根据用户输入过滤查询集,您可以参考 POST 方法:

    from app.forms import BlogFilterForm
    
    class Blog(LoginRequiredMixin, AjaxListView):
        context_object_name = "posts"
        template_name = 'blog/blog.html'
        page_template = 'blog/post_list.html'
        success_url = '/blog'
    
        def get_queryset(self): # define queryset
            queryset = Post.objects.all() # default queryset
            if self.request.method == 'POST': # check if the request method is POST
                form = BlogFilterForm(self.request.POST) # define form
                if form.is_valid(): 
                    name = form.cleaned_data['name'] # retrieve data from the form
                    if name:
                        queryset = queryset.filter(name=name) # filter queryset
            else:
                queryset = queryset
            return queryset 
    
        def get_context_data(self, **kwargs):
            context = super(Blog, self).get_context_data(**kwargs)
            context['form'] = BlogFilterForm() # define context to render the form on GET method
            return context
    
        def post(self, request, *args, **kwargs): # define post method
            return super(Blog, self).get(request, args, kwargs)
    

    无休止的分页应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-24
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2012-03-14
      • 2012-06-20
      相关资源
      最近更新 更多