1

私は使用していて、関数django-haystackをオーバーライドしたいと考えていますbuild_page()。ここにbuild_page()の URL があります。paginatorデフォルトの djangoをに置き換えたいdjango-paginator。どうもありがとう :-)

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
4

2 に答える 2

1

で使用django-haystackしましdjango-pure-paginationた。Paginationを機能させるには、build_pageHaystacksSearchViewクラスとオブジェクトrenderのメソッドをオーバーライドするだけです。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

デフォルトのレンダリングを変更するには(たとえば、ブートストラップを使用する場合)、最も簡単な方法は、パッケージにpagination.htmlバンドルされているテンプレートをテンプレートディレクトリにコピーし、上記のように含めることです。django-pure-paginationpagination.html

于 2012-08-27T12:03:08.133 に答える
0

django-pure-pagination を使用してこの作業を行いました

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'),
)

ビュー.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
于 2012-08-01T19:20:24.543 に答える