【问题标题】:'NoneType' object is not iterable, paginator'NoneType' 对象不可迭代,分页器
【发布时间】:2015-03-31 01:55:19
【问题描述】:

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

'NoneType' 对象不可迭代,分页器

在分析下面的代码后,我认为是 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})

【问题讨论】:

  • 请发布完整的回溯

标签: django pagination


【解决方案1】:

可能问题出在这里:

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()

【讨论】:

  • 我已经完成了,我没有任何结果。但在第二页上,我必须有其他结果。我的数据库有 4 个房子,第一页有 2 个,第二个有你的解决方案,错误消息消失了,但我什么都没有。为什么 qset 采用 None 喜欢值
  • 在浏览器的url参数中,必须有'etat'和'categorie'这样的:192.168.0.1:8000/?etat=tout&categorie=dummy_category。在第二页,如果你有这样的参数,检查 url。
  • 不只是 /?page=2 就像在 django 文档中一样。分页器上的示例不要谈论像 192.168.0.1:8000/?etat=tout&categorie=dummy_category 之类的东西
  • 好吧,您的代码表明您的 url 参数中必须有 etat 和 categorie(用于在模板中查看 House)。因此,您应该像这样测试您的视图是否正常工作:/?page=2&etat=tout&categories=some_category
【解决方案2】:

好的,我想我明白了,我像这样在下一个模板 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})

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

【讨论】:

  • 我不能说这是否是一个好方法。但如果它有效,那么它应该没问题,如果你认为。
猜你喜欢
  • 2016-02-08
  • 2020-05-06
  • 1970-01-01
  • 2013-12-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多