Django 分页器引发类型错误

3 投票
2 回答
932 浏览
提问于 2025-04-17 06:06

我正在尝试使用Django的分页模块,这个模块在1.3版本的标准发行版中包含。

当我试图加载一个当前由分页控制的页面时,如果我在网址中不加上?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 个回答

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

你必须把字符串转换成整数。

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

你可以这样做。两种方法都可以运行。

6

试着把这一行改成:

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

改成这样:

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

问题在于你正在获取一个不存在的参数。用 [] 来索引会导致 KeyError 错误,但 get 方法如果找不到这个参数就会返回 None。然后分页器在调用 int(None) 时就出错了。

get 方法的第二个参数是一个默认值,如果这个键不存在,就返回这个默认值,而不是 None。我传入了 '1',这样 int 就不会出错了。

撰写回答