【问题标题】:Django Paginator raising TypeErrorDjango Paginator 引发 TypeError
【发布时间】:2011-11-11 05:04:40
【问题描述】:

我正在尝试使用标准发行版 1.3 中的 django 分页模块。

当尝试加载当前由分页控制的页面时,如果我在 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)

任何人以前见过这个错误和/或知道如何纠正它?

【问题讨论】:

  • PageNotAnInteger 和 EmptyPage 的异常不应该检查吗?

标签: python django django-models django-pagination


【解决方案1】:

尝试更改此行:

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

到这里:

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

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

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

【讨论】:

  • 实现梦想。感谢您的快速答复。我现在担心的是,我完全按照文档中的说明进行了操作。为什么这不能正常工作?
  • @Neil:显然您使用的文档比您的 Django 安装更新。这显然是fixed in revision 16026
  • @Neil:如果您查看the documentation for the last stable version,您会发现他们在示例中默认为get
  • 这可以解释很多。谢谢!
【解决方案2】:
get = self.request.GET
page = int(get.get('page'))

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

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

你可以做到。两个都跑。

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2013-03-31
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多