' NoneType'对象不可迭代,paginator

时间:2015-03-30 09:57:02

标签: django pagination

我对django的分页有问题。我收到了消息

  

'NoneType'对象不可迭代,paginator

在分析下面的代码之后,我认为它是获得“无值”的qset变量。为什么,我不明白。

def recherche(request):   
    if request.method == "GET":

        search_etat = request.GET.get('etat')

        search_cat = request.GET.get('categorie') #and :

        qset = None

        if search_etat == 'tout':

            if search_cat!='0': 

                qset = (
                   Q(type=search_cat) &
                   Q(disponiblite ='Oui')

                )


        resultat = House.objects.filter(qset)

        paginator = Paginator(resultat, 2)
        page = request.GET.get('page')

        try:
            resul = paginator.page(page)

            except PageNotAnInteger:

            resul = paginator.page(1)

        except EmptyPage:

            result = paginator.page(paginator.num_pages)


    return render(request,'resultat.html',{'result':result})

2 个答案:

答案 0 :(得分:0)

问题可能就在这里:

qset = None

    if search_etat == 'tout':

        if search_cat!='0': 

            qset = (
               Q(type=search_cat) &
               Q(disponiblite ='Oui')

            )

此处qset的值在代码的后半部分if块中不会发生变化。因此,当您像House.objects.filter(qset)一样过滤时,它会抛出错误。

所以可能的解决方案应该是:

if search_etat == 'tout':
        if search_cat!='0': 
            qset = (
               Q(type=search_cat) &
               Q(disponiblite ='Oui')
            )

if qset is not None:
    resultat = House.objects.filter(qset)
else:    
    resultat = House.objects.none()

答案 1 :(得分:0)

好吧,我想我明白了,我在模板html页面中添加?etat = tout& categorie = dummy_category就像下一个

{% if form.has_next %}

<a href="?page={{ form.next_page_number }}&etat={{ tout }}&categorie={{ categorie }}"> >> </a>

               {% endif %}

和第二次回归

    try:
        resul = paginator.page(page)

        except PageNotAnInteger:

        resul = paginator.page(1)

    except EmptyPage:

        result = paginator.page(paginator.num_pages)

    return render(request,'resultat.html',{'result':result,'etat':etat,'categorie':categorie})

return render(request,'resultat.html',{'result':result})

这是一个好方法吗?但它正在运作