【问题标题】:Django-haystack and django-pagination not working together?Django-haystack 和 django-pagination 不能一起工作?
【发布时间】:2012-07-07 18:20:17
【问题描述】:

我将 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

你能帮帮我吗?怎么了?

【问题讨论】:

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


    【解决方案1】:

    我使用扩展 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 %}
    

    就是这样:)

    【讨论】:

      【解决方案2】:

      在 Django 1.8.4 中,您只需将页面替换为模板中的 page_obj。

      例子:

      {% for arg in page_obj.object_list %}
      

      【讨论】:

        【解决方案3】:

        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,
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-29
          • 2019-10-08
          • 2011-12-09
          • 2012-03-25
          • 1970-01-01
          • 2019-11-14
          • 1970-01-01
          相关资源
          最近更新 更多