2012-04-12 64 views
1

我正在使用django-haystack并且想要覆盖build_page()函数。这里是一个build_page()的网址。我想用django-paginator替换默认的django paginator。非常感谢:-)override haystack build_page()函数

def build_page(self): 
    """ 
    Paginates the results appropriately. 

    In case someone does not want to use Django's built-in pagination, it 
    should be a simple matter to override this method to do what they would 
    like. 
    """ 

我已经写了凌乱的代码。你能帮我吗?感谢

class MyView(SearchView): 
    def build_page(self): 
    build_page = super(MyView, self).build_page() 
    page = self.results 
    return page 

回答

0

我做了使用Django的纯分页

urls.py

from haystack.views import SearchView, search_view_factory 
from haystack.forms import SearchForm 
from myproj.myapp.views import CustomSearchView 

urlpatterns += patterns('haystack.views', 
    url(r'^buscar/$', search_view_factory(
     view_class=CustomSearchView, 
     template='myapp/obj_list.html', 
     form_class=SearchForm 
    ), name='haystack_search'), 
) 

views.py

from haystack.views import SearchView 
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger 
from django.conf import settings 


class CustomSearchView(SearchView): 
    def __name__(self): 
     return "CustomSearchView" 

    def extra_context(self): 
     extra = super(CustomSearchView, self).extra_context() 

     try: 
      page = self.request.GET.get('page', 1) 
     except PageNotAnInteger: 
      page = 1 

     RESULTS_PER_PAGE = getattr(settings, 'HAYSTACK_SEARCH_RESULTS_PER_PAGE', 20) 
     p = Paginator(self.results, RESULTS_PER_PAGE, request=self.request) 
     pag = p.page(page) 
     extra['page_obj'] = pag 

     # important, to make haystack results compatible with my other templates 
     extra['myobj_list'] = [i.object for i in pag.object_list] 

     return extra 
1

django-pure-paginationdjango-haystack这项工作。所有您需要做的事情,让分页工作是覆盖Haystacks SearchView类和renderPage对象的方法build_page

urls.py

from core.views import ModifiedSearchView 

urlpatterns = patterns('', 
    url(r'^search/', ModifiedSearchView(), name='haystack_search'), 
) 

views.py

from haystack.views import SearchView 
from pure_pagination.paginator import Paginator 
from django.http import Http404 

class ModifiedSearchView(SearchView): 
    def build_page(self): 
     try: 
      page_no = int(self.request.GET.get('page', 1)) 
     except (TypeError, ValueError): 
      raise Http404("Not a valid number for page.") 

     if page_no < 1: 
      raise Http404("Pages should be 1 or greater.") 

     paginator = Paginator(self.results, self.results_per_page, request=self.request) 
     page = paginator.page(page_no) 

     return (paginator, page) 

search.html

{{ page.render }} 

{% include "pagination.html" with page_obj=page %} 

pagination.html

要修改默认渲染(例如,如果你使用引导程序),最简单的办法就是复制捆绑了django-pure-pagination包放到你的模板目录pagination.html模板,包括pagination.html如上图所示。

+0

我在Haystack 2.0.0上测试了这个解决方案,我可以证实它的工作原理。谢谢eli。 – 2013-11-23 01:18:41