我使用干草堆与飞快移动,以及django 1.3。在我的网址中,我有:
url(r'^search/', include('haystack.urls')),
我在app中创建了自定义模板:search / 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
你能帮帮我吗?怎么了?
答案 0 :(得分:2)
我通过使用扩展了django-haystack的SearchView的自定义SearchView来制作django-haystack和django-pagination。只需注释掉或删除(paginator, page) = self.build_page()
以及页面和分页器上下文变量。
以下是我的自定义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 :(得分: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 :(得分:1)
在Django 1.8.4中,你只需要在模板中替换page_obj的页面。
示例:
{% for arg in page_obj.object_list %}