0

我用haoshstack和whoosh,以及django 1.3。在我的网址,我有:Django-haystack和django-pagination不能一起工作?

url(r'^search/', include('haystack.urls')), 

我在应用程序中创建自定义模板:搜索/ seach.html:

{% if page.object_list %}               

{% autopaginate page.object_list 3 %} 
{% for arg in page.object_list %} 
... 
{% endfor%} 
{% paginate %} 

我的搜索工作正常!也呈现分页(与paginate templatetag)是正确的。但是当我尝试去下一页时,我得到这个错误:

Page not found (404) 
Request Method:  GET 
Request URL: http://127.0.0.1:8000/search/?page=2&q=Aktualno%C5%9B%C4%87 

你能帮我吗?怎么了?

回答

1

haystack默认情况下SearchView的page不支持django-pagination。 如果您想使用django-pagination,则可以继承SearchView并添加一个新的上下文变量以存储搜索结果。然后你可以使用这个上下文变量来分页。

def create_response(self): 
    (paginator, page) = self.build_page()   
    context = { 
     'query': self.query, 
     'form': self.form, 
     'page': page, 
     'results': self.results, 
     'paginator': paginator, 
     'suggestion': None, 
     } 
2

我通过使用扩展Django的草垛搜索查看自定义搜索查看由Django的草垛和Django的拼版作业。只是注释掉或删除(paginator, page) = self.build_page()和页面和paginator上下文变量。

下面是我的自定义SearchView。

class SearchView(SearchView): 

def create_response(self): 
    """ 
    Generates the actual HttpResponse to send back to the user. 
    """ 
    # (paginator, page) = self.build_page() 

    context = { 
     'query': self.query, 
     'form': self.form, 
     # 'page': page, 
     # 'paginator': paginator, 
     'suggestion': None, 
     'results': self.results 
    } 

    if self.results and hasattr(self.results, 'query') and self.results.query.backend.include_spelling: 
     context['suggestion'] = self.form.get_suggestion() 

    context.update(self.extra_context()) 
    return render_to_response(self.template, context, context_instance=self.context_class(self.request)) 

和使用效果上下文变量模板PAGINATE:

{% autopaginate results 2 %} 
    {% for result in results %} 
     {{ result.attribute }} 
    {% endfor %} 
    {% paginate %} 

完蛋了:)

1

在Django的1.8.4,你只需要在你的模板,以取代page_obj页。

实施例:

{% for arg in page_obj.object_list %}