Django 如何在搜索结果的对象详细视图中实现上一个和下一个链接?

Django 如何在搜索结果的对象详细视图中实现上一个和下一个链接?,django,paginator,Django,Paginator,我几乎完成了我的第一个准备生产的django项目。我还剩下一个大问题: 我得到了一个文章搜索视图,它呈现了一个找到的文章列表。分页对于resultlist来说效果很好。当我点击文章标题时,对象详细信息页面打开。我想要的:对象详细信息页面上的上一个和下一个结果链接 我尝试了几种解决类似问题的方法,但没有找到有效的解决方案。如果我尝试将分页器仅用于一篇文章(对于对象详细信息页面),我需要知道结果列表中的分页器索引。但是怎么做呢 即使是.get\u next(previous)\u by\u foo-

我几乎完成了我的第一个准备生产的django项目。我还剩下一个大问题: 我得到了一个文章搜索视图,它呈现了一个找到的文章列表。分页对于resultlist来说效果很好。当我点击文章标题时,对象详细信息页面打开。我想要的:对象详细信息页面上的上一个和下一个结果链接

我尝试了几种解决类似问题的方法,但没有找到有效的解决方案。如果我尝试将分页器仅用于一篇文章(对于对象详细信息页面),我需要知道结果列表中的分页器索引。但是怎么做呢


即使是.get\u next(previous)\u by\u foo-Method在这个场景中也不可用。还是我遗漏了一些明显的东西?提前谢谢你的帮助

来自django的Paginator使用列表。在列表中搜索索引的一种方法如下:

['aaa', 'bbb', 'ccc'].index('bbb') # result: 1
大概是这样的:

model = object()
[object(), object(), model].index(model) # result: 2

希望这能提示您如何在列表中找到paginator索引。

如果您想在“对象详细信息”页面上获得指向搜索结果中下一项的链接,则必须从搜索结果中获取下一项。要获取下一个项目,您需要执行在搜索页面中执行的相同搜索查询,并应用一些额外的过滤器,以便仅从该列表中获取下一个项目。但这里有一个问题:在对象详细信息页面中只有对象id,没有
搜索词。如果没有搜索词,您将无法创建搜索查询。这意味着您需要以某种方式获取搜索词。你是怎么得到那个搜索词的?您需要以某种方式从搜索结果页传递它。您可以将搜索词保存在session/cookie中,或者更好:您可以通过GET参数将其传递到object details页面。现在,当您在“对象显示”页面中搜索术语时,可以执行搜索查询,并从该查询中选择下一个和上一个对象

我认为现在你应该能够实现这一点。如果没有,您可以显示一些对象详细信息视图的代码,也许有人会为您编写一些代码。

您可以使用此功能

<a href="?page={{ page_obj.next_page_number }}">next &raquo;</a>
<a href="?page={{ page_obj.previous_page_number }}">&laquo; previous</a>


我不知道我是否理解您的需求,但基本python似乎可以解决您的问题。人们使用分页的主要原因是没有将数据库中的所有对象加载到列表中。应使用sql查询选择下一个对象,该查询在django中看起来像:
filter(id\uu gt=current\u obj.id)。order('id')[0]
@Guilherme:谢谢,但我怀疑这是否足够。问题是:分页A显示10个项目,分页B仅显示1个相同的对象列表。在分页A中,我需要每个项目的分页B链接。因此,我必须在分页B的索引中搜索分页A中的每个对象。必须将此关系指定给模板。所以最后我可以写(在模板中):{%for a in a%}{b.index}{%endfor%}。是的,这正是我开始困惑的地方。我希望有一个更简单的方法。我可能自己也找到了:“get_next_by_foo”方法将列表作为过滤器,在其中查找“next_by_foo”。因此,我必须将结果列表作为参数传递。无论如何,我的搜索结果都是按日期预先排序的。不过,正如您可能已经预料到的那样,我必须包括get参数。至少不使用会话/cookies保存结果列表。我仍然对所有实际的DB请求有点不满意。但至少我现在已经开始工作了。我没有得到分页选项来做我想做的事。谢谢!!