0

我将 haystack 与 whoosh 和 django 1.3 一起使用。在我的网址中,我有:

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

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

{% if page.object_list %}                                                        

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

我的搜索工作正常!渲染的分页(使用分页模板标签)也是正确的。但是当我尝试转到下一页时,我收到了这个错误:

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

你能帮助我吗?怎么了?

4

3 回答 3

2

我使用扩展 django-haystack 的 SearchView 的自定义 SearchView 使 django-haystack 和 django-pagination 工作。只需注释掉或删除(paginator, page) = self.build_page()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))

并在模板中使用结果上下文变量进行分页:

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

而已 :)

于 2013-11-01T07:10:53.110 回答
2

在 Django 1.8.4 中,您只需在模板中替换 page 为 page_obj 即可。

例子:

{% for arg in page_obj.object_list %}
于 2015-10-12T23:59:14.810 回答
1

默认的haystackSearchViewpage不支持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,
        }
于 2012-07-23T06:29:40.343 回答