我几乎完成了我的第一个生产就绪的django项目。我还有一个大问题:我得到了一个文章搜索视图,显示了找到的文章列表。分页对于结果列表来说工作得很好。当我单击文章标题时,对象详细信息页面打开。我想要的:对象详细信息页面上的上一个和下一个结果链接。
我尝试了几种方法来解决类似的问题,但没有找到一个有效的解决方案。如果我尝试只对一篇文章使用分页器(对于object-detail-page),我需要知道结果列表中的分页器索引。但如何?
即使.get_next(previous)_by_foo-Method在这种情况下也不是真正可用的。还是我遗漏了什么明显的东西?提前感谢您的帮助!
Paginator from django with lists。在列表中搜索索引的一种方式就像这样:
['aaa', 'bbb', 'ccc'].index('bbb') # result: 1
或者像这样:
model = object()
[object(), object(), model].index(model) # result: 2
希望这能给你一些提示,告诉你如何在列表中找到paginator-index
如果您想在object-details-page上从搜索结果中获得到下一个项目的链接,您必须从搜索结果中获得下一个项目。要获得下一个项目,您需要执行与在搜索页面中执行的相同的搜索查询,并应用一些额外的过滤器,以便仅从该列表中获取下一个项目。但是这里有一个问题:在对象详细信息页面中只有对象id,而没有search-term
。没有搜索词,您将无法创建搜索查询。这意味着你需要以某种方式获得搜索词。你如何得到那个搜索词?您需要以某种方式从搜索结果页面传递它。您可以将搜索词保存在session/cookie中,或者更好:您可以通过GET参数将其传递到对象详细信息页面。现在,当您在对象显示页面中搜索词时,您可以执行搜索查询,并从该查询中选择下一个和上一个对象。
我认为现在你应该能够实现这一点。如果没有,你可以展示一些你的对象细节视图的代码,也许有人会为你写一些代码。
你可以使用
<a href="?page={{ page_obj.next_page_number }}">next »</a>
<a href="?page={{ page_obj.previous_page_number }}">« previous</a>