Django-haystack和django-pagination没合作?

时间:2012-07-07 18:20:17

标签: django django-templates django-haystack django-pagination

我使用干草堆与飞快移动,以及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
你能帮帮我吗?怎么了?

3 个答案:

答案 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 %}