首页 > 解决方案 > 无限列表过滤在 Django 应用程序中不起作用

问题描述

创建最简单的无限列表,该列表在到达页面末尾时展开。我的代码看起来像这样:

视图.py

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

    query = Product.objects.all()    

    #paginator
    page = request.GET.get('page', 1)
    paginator = Paginator(query, 21)
    try:
        numbers = paginator.page(page)
    except PageNotAnInteger:
        numbers = paginator.page(1)
    except EmptyPage:
        numbers = paginator.page(paginator.num_pages)

在模板中我以这种方式使用它:

<!-- products list -->
<div class=" infinite-container">
  <!-- product query -->
  {% for product in numbers %}
    <div class="accordion accordion-spaced infinite-item">
      <h1>{{ product }}</h1>
    </div>
  {% endfor %}
  <!-- end query -->
</div>

<!-- Load more -->
{% if numbers.has_next %}
  <div class="mt-4 text-center">
    <a href="?page={{ numbers.next_page_number }}" class="btn infinite-more-link">Loading...</a>
  </div>
{% endif %}
<!-- end pagination -->

<!-- Infinite Scroll -->
<script src="{% static 'assets/js/jquery-3.1.1.min.js' %}"></script>
<script src="{% static 'assets/js/jquery.waypoints.min.js' %}"></script>
<script src="{% static 'assets/js/infinite.min.js' %}"></script>
<script>
var infinite = new Waypoint.Infinite({
  element: $('.infinite-container')[0]
});
</script>

如果我尝试按类别添加过滤,它仅适用于第一页,并且展开后显示的下一个项目不正确(它显示不应该显示的内容)。我这样做:

query = Product.objects.all()
sort = request.GET.get('sort', False)
if sort:
    query = query.filter(category=sort)
#[... other elements in the view without changes ...]

如何将过滤应用于无限下拉列表以使其在每个页面上正常工作?

我如何创建一个下拉列表,所有文件。

也许这会更容易展示一个生动的例子。我的网站 https://tgwebsite.com/opinie/#all_reviews

https://tgwebsite.com/opinie/?sort=Google#all_reviews(第一页被过滤,下一个页面无法正常工作,在这种情况下,只会显示红色评论。)

标签: django

解决方案


我今天遇到了同样的问题。在线无限滚动示例与 Django 标准过滤不能很好地结合。

您将需要修改 href 值以包含类别过滤器值。

例如在您的代码中:

<a href="?category={{request.GET.category}}&page={{ numbers.next_page_number }}" class="btn infinite-more-link">Loading...</a>

如果您在过滤器表单中有 CSRF 令牌,您也必须将其添加到 URL。


推荐阅读