list.reverse()在Django中无法正常工作

时间:2013-12-14 06:19:19

标签: python django pagination blogs

我是第一个使用Django框架的项目,我决定创建一个博客,因为很容易在网上找到它的内容。然后,我发现了Paginator模块,并决定使用它。问题是,每当我添加一个帖子,它就会到达数据库的末尾,所以我有一个博客,到目前为止,它首先显示旧帖子。

因此,我决定使用.reverse(),如下所示:

def index(request):
    posts = Post.objects.all()
    posts.reverse()
    paginator = Paginator(posts, 2)

    try:
        page = int(request.GET.get("page", "1"))
    except ValueError:
        page = 1

    try:
        posts = paginator.page(page)
    except (InvalidPage, EmptyPage):
        posts = paginator.page(paginator.num_pages)

    return render_to_response('index.html', {
                                             'Posts': posts,
                                             'Sideposts': Sidepost.objects.all(),
                                             })

唯一的问题是,这不起作用,至少不与Paginator一起工作。当我停止使用Paginator时,它可以工作,但除此之外它没有。

我认为这是一种非常奇怪的行为,我环顾四周但却找不到任何能帮助我解决这个问题的事情。我做错了吗?

2 个答案:

答案 0 :(得分:6)

让数据库进行排序:

posts = Post.objects.all().order_by('-id')

当然,最好使用日期字段或其他东西。

答案 1 :(得分:2)

首先,Post.objects.all()不返回列表对象,而是返回queryset对象。

并且reverse方法不会更改查询集本身,但会返回查询集的反转版本。

如果您想要列表对象,请将其转换为列表posts = list(Post.objects.all())以使用reverse方法。

也许以下更可取:

posts = Post.objects.all().reverse()