作者:韩韩韩韩韩海 | 来源:互联网 | 2024-12-21 11:58
我即将完成我的第一个生产就绪的Django项目,但遇到了一个难题:需要在文章详情页面添加前一个和下一个结果的导航链接。当前,我有一个文章搜索视图,可以渲染找到的文章列表,并且分页功能工作正常。点击文章标题后,会打开对象详情页面。然而,我在对象详情页面上无法实现前一个和下一个结果的链接。
我尝试了几种方法来解决类似问题,但都没有成功。例如,使用只包含一篇文章的分页器(paginator),需要知道该文章在结果列表中的索引位置。但如何获取这个索引呢?此外,.get_next_by_foo() 和 .get_previous_by_foo() 方法在这个场景下似乎也不适用。是否有更简单的解决方案?感谢任何帮助!
解决方案
#1: 使用列表索引查找
Django的Paginator处理的是列表,因此可以通过列表索引来解决问题:
['aaa', 'bbb', 'ccc'].index('bbb') # 结果为 1
model = object()
[object(), object(), model].index(model) # 结果为 2
这可以帮助你找到文章在列表中的索引位置。
#2: 使用分页链接
你可以在模板中使用分页对象提供的属性来生成前后链接:
下一页 »
« 上一页
#3: 传递搜索词
要在对象详情页面上显示下一个或上一个结果的链接,你需要从搜索结果中获取下一个条目。为此,你需要执行与搜索页面相同的查询,并应用额外的过滤条件来获取下一个条目。但是,在对象详情页面上,你只有对象ID而没有搜索词。因此,你需要通过某种方式将搜索词传递给对象详情页面。可以通过会话、COOKIE或GET参数来传递搜索词。一旦你在对象详情页面上有搜索词,就可以执行搜索查询并选择下一个和上一个对象。
如果你仍然无法实现,可以展示你的对象详情视图代码,或许有人可以为你编写一些具体的代码。