Django如何在点击网址时获取第一页的项目?

时间:2016-05-21 16:16:08

标签: python django pagination

我正在制作我的第一个django应用程序,更特别的是在分页上。在我继续加入分页之前:

http://localhost:8000/posts

我会向我显示所有项目。

但现在我添加了分页,一切正常。我每页只显示2个项目,我有5个项目。当我点击页面时,一切正常:

http://localhost:8000/posts?page=1
http://localhost:8000/posts?page=2
http://localhost:8000/posts?page=3

但是当我点击时:

http://localhost:8000/posts

我遇到以下错误:

That page number is not an integer

这是我的view.py:

def posts(request):
    all_posts = Post.objects.order_by('published_date')
    paginator = Paginator(all_posts, 2)
    page = request.GET.get("page")
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        posts = paginator.page(page)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)

    context = {
        'posts': posts,
    }
    return render(request, 'my_blog/posts.html', context)

我怎样才能解决这个问题,并在点击时显示:http://localhost:8000/posts显示第一页

2 个答案:

答案 0 :(得分:4)

问题出在PageNotAnInteger异常处理中,它应该是1而不是page

try:
    posts = paginator.page(page)
except PageNotAnInteger:
    posts = paginator.page(1)
except EmptyPage:
    posts = paginator.page(paginator.num_pages)

答案 1 :(得分:1)

尝试替换:

except PageNotAnInteger:
        posts = paginator.page(page)

通过

except PageNotAnInteger:
        posts = paginator.page(1)

特别同意