我是第一个使用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时,它可以工作,但除此之外它没有。
我认为这是一种非常奇怪的行为,我环顾四周但却找不到任何能帮助我解决这个问题的事情。我做错了吗?
答案 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()