django - 无限列表过滤在 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 标准过滤不能很好地结合。
您将需要修改 href 值以包含类别过滤器值。
例如在您的代码中:
<a href="?category={{request.GET.category}}&page={{ numbers.next_page_number }}" class="btn infinite-more-link">Loading...</a>
如果您在过滤器表单中有 CSRF 令牌,您也必须将其添加到 URL。
推荐阅读
- asp.net-core-mvc - [来自正文]。Post Controller 中的参数值始终为 NULL
- python-3.x - 有没有办法根据节点是否具有共享属性来形成节点之间的连接?
- python - 使用 photutils BasicPSFPhotometry 在 PSF 光度测量中的拟合优度
- riscv - RISCV32 与 RISCV64
- ios - 我正在尝试通过 cocoapods 安装 firebase,但出现错误
- javascript - *ngFor 在 Ionic Popover/Modal 中不起作用
- nginx - 如何添加 NGINX HTTP Header Authentication:Bearer 并使用 NGINX-JS 进行验证
- javascript - 图像到粒子过渡滚动
- android - 我正在使用 Intent.ACTION_OPEN_DOCUMENT_TREE 作为 location 。它是否需要 WRITE_EXTERNAL_STORAGE 或任何其他存储权限?
- visual-studio-code - 如何配置 vscode 终端命令行提示颜色?