【问题标题】:How to implement previous- and next-links in the object-detail-view of a search-result?如何在搜索结果的对象详细视图中实现上一个和下一个链接?
【发布时间】:2011-10-15 14:09:19
【问题描述】:

我的第一个生产就绪 django 项目几乎完成了。我还有一个大问题: 我有一个文章搜索视图,它呈现找到的文章列表。分页对结果列表工作得很好。当我单击文章标题时,将打开对象详细信息页面。我想要的是:对象详细信息页面上的上一个和下一个结果链接。

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

即使是 .get_next(previous)_by_foo-Method 在这种场景 AFAICT 中也不是真正可用的。还是我在这里遗漏了一些明显的东西?提前感谢您的帮助!

【问题讨论】:

  • 我不知道我是否明白你想要什么,但似乎基本的python可以解决你的问题

标签: django


【解决方案1】:

来自 django 的 Paginator 可用于列表。一种在列表中搜索索引的方法是这样的:

['aaa', 'bbb', 'ccc'].index('bbb') # result: 1

大概是这样的:

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

希望能给你一个关于如何在你的列表中找到 paginator-index 的提示。

【讨论】:

  • 人们使用分页的主要原因是 not-loading-all-objects-from-database-into-list。应该使用 sql 查询选择下一个对象,在 django 中将如下所示:filter(id__gt=current_obj.id).order('id')[0].
  • @Guilherme:谢谢,但我怀疑这是否足够。事情是:分页 A 显示 10 个项目,分页 B 仅显示 1 个相同的对象列表。在分页 A 中,我需要每个项目的分页 B 链接。所以我必须通过 Pagination B 的索引来搜索 Pagination A 中的每个对象。这种关系必须赋予模板。所以最后我可以写(在模板中):{% for a in A %} { b.index }{% endfor %}。
【解决方案2】:

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

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

【讨论】:

  • 是的,这正是让我感到困惑的地方。我希望有一个更简单的方法。而且我自己可能已经找到它:“get_next_by_foo”-方法将列表作为过滤器在哪里寻找“next_by_foo”。所以我必须将我的结果列表作为参数传递。无论如何,我的搜索结果都是按日期预定的。
  • 好吧,正如您可能已经预料到的那样,我必须包含 get 参数。至少不使用会话/cookie 来保存结果列表。而且我对所有实际的 DB-Requests 仍然有点不满意。但至少我现在让它工作了。我没有得到分页替代品来做我想做的事。所以谢谢!!
【解决方案3】:

你可以用这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2019-01-24
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多