Paginate搜索结果ListView

时间:2012-10-29 01:07:02

标签: django django-views

我正在使用ListView以5个结果显示所有NewPersons和paginate。 NewPersons显示在表格中,左侧有一个搜索框。当在GET中搜索'q'时。为了在搜索时更改查询集,我已经覆盖了视图的get_queryset方法。

我遇到的问题是,因为如果搜索返回的结果超过5个,我会对5个结果进行分页;但是,如果单击“下一步”查看第二页,则会返回完整对象列表的第二页,而不是搜索结果的第二页。

所以我想知道如何正确地对我的搜索结果进行分页。谢谢。 JD

class PersonListView(ListView):
model = NewPerson
template_name = 'list.html' 
paginate_by = 5

def get_queryset(self):
    """
    Get the list of items for this view. This must be an interable, and may
    be a queryset (in which qs-specific behavior will be enabled).
    """
    if 'q' in self.request.GET:
        q = self.request.GET['q']
        queryset = NewPerson.objects.filter(Q(FirstName__icontains=q) | Q(LastName__icontains=q))
    else:
        if self.queryset is not None:
            queryset = self.queryset
            if hasattr(queryset, '_clone'):
                queryset = queryset._clone()
        elif self.model is not None:
            queryset = self.model._default_manager.all()
        else:
            raise ImproperlyConfigured(u"'%s' must define 'queryset' or 'model'"
                                       % self.__class__.__name__)
    return queryset

2 个答案:

答案 0 :(得分:4)

添加ListView的模板,如下所示:

{% if request.GET.q %}

<a href="?search={{ request.GET.search}}&page={{ page_obj.next_page_number }}">
Next&nbsp;&raquo;
</a>

{% else %}

<a href="?page={{ page_obj.next_page_number }}">Next&nbsp;&raquo;</a>

{% endif %}

答案 1 :(得分:1)

或者,如果您有多个搜索字词

 <a href="?{{ request.GET.urlencode }}&page={{ page_obj.next_page_number }}">
Next&nbsp;&raquo;
</a>