我对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})
答案 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})
这是一个好方法吗?但它正在运作