Python list.reverse()不';我不能在Django正常工作

Python list.reverse()不';我不能在Django正常工作,python,django,pagination,blogs,Python,Django,Pagination,Blogs,我正在进行Django框架的第一个项目,我决定创建一个博客,因为在网上很容易找到关于它的内容。一、 然后,发现了Paginator模块,并决定使用它。问题是,每当我添加一篇文章时,它都会转到数据库的末尾,因此我有一个博客,到目前为止,它首先显示旧文章 因此,我决定使用.reverse(),如下所示: def index(request): posts = Post.objects.all() posts.reverse() paginator = Paginator(po

我正在进行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时,它会工作,但在其他方面它不会


我认为这是一种非常奇怪的行为,我环顾了一下四周,但找不到任何有助于我解决这个问题的东西。我做错了什么吗?

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

方法不会更改queryset本身,而是返回queryset的反向版本

将其转换为list
posts=list(Post.objects.all())
以使用
reverse
方法(如果需要list对象)

也许以下更可取:

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

让数据库进行排序:

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

当然,最好使用日期字段或其他内容。

如果没有
reverse
方法,问题不会执行失败吗?它成功了,谢谢!至于第二部分,因为我想按时间对我的帖子进行排序,每次我添加一个新帖子时,它都会进入数据库的末尾,所以不应该只
.reverse()
就够了吗?@thefortheye,你是对的。我更新了答案。谢谢你的评论。@AugustoQ,我更新了答案。我最初关于
reverse
方法的回答是错误的
Queryset.reverse
返回新的Queryset,而不是像
列表那样更改Queryset本身。reverse
@falsetru,您的第一个答案实际上有效。这个我以前试过,但没试过当我放置
posts=Post.objects.all().reverse()
时,什么都不会发生,就像我将它们分开放置一样。当我使用
posts=list(Post.objects.all())
然后使用
posts.reverse()
时,它工作得非常好。这更好,因为它将允许分页仅加载页面所需的内容。强制转换到列表将加载查询中的所有内容。