Django Paginator提出了TypeError

时间:2011-11-11 05:04:40

标签: python django django-models django-pagination

我正在尝试使用django分页模块,包括标准分发版本1.3。

当尝试加载当前由分页控制的页面时,如果我在uri上不包含?page =,则会抛出TypeError。我从来没有出现过这种情况,也没有看到任何理由发生。

这是我目前的观点:

paginator = Paginator(mails_list, 25) # Shows 25 mails per page

page = request.GET.get('page')
try:
    mails = paginator.page(page)
except PageNotAnInteger:
    # If page is not an integer, deliver the first page.
    mails = paginator.page(1)
except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results
    mails = paginator.page(paginator.num_pages)

类型错误:

int() argument must be a string or a number, not 'NoneType'

错误来自上述代码的第3行:

mails = paginator.page(page)

之前有人目睹过这个错误和/或知道如何纠正错误吗?

2 个答案:

答案 0 :(得分:5)

尝试更改此行:

page = request.GET.get('page')

对此:

page = request.GET.get('page', '1')

问题是你得到的参数不存在。使用[]建立索引会产生KeyError,但get方法会返回None(如果不存在)。分页器正在调用int(None),但失败了。

如果密钥不存在而不是get,则None方法的第二个参数是默认返回。我通过'1' int不应该失败。

答案 1 :(得分:-1)

get = self.request.GET
page = int(get.get('page'))

您必须将字符串转换为int 或

 page = int(request.GET.get('page'))
你可以做到。他们都跑了。