Django 分页器引发类型错误
我正在尝试使用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
就不会出错了。