我从以下链接中学到了Django的分页基础知识: https://simpleisbetterthancomplex.com/tutorial/2016/08/03/how-to-paginate-with-django.html
但是!我唯一的问题是我想在不更改网址的情况下进行分页。
通过这种方式,我的意思是我需要在一个HTML页面中有多个表的情况下对一个表进行分页。
我如何只对一张桌子分页?
我的代码:
这是html模板的基本结构:
...
<table class="uk-table uk-table-striped">
<tbody>
{% for post_status in post.statusPage %}
<tr>
<td>{{ post_status.status_time }}</td>
<td>{{ post_status.repost_count }}</td>
<td>{{ post_status.comment_count }}</td>
<td>{{ post_status.like_count }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if post.statusPage.has_other_pages %}
<ul class="uk-pagination uk-flex-center" uk-margin>
{% if post.statusPage.has_previous %}
<li><a href="#"><span uk-pagination-previous></span></a></li>
{% else %}
<li><a><span uk-pagination-previous></span></a></li>
{% endif %}
{% for i in post.statusPage.paginator.page_range %}
{% if post.statusPage.number == i %}
<li class="uk-active"><span>{{ i }}</span></li>
{% else %}
<li><a href="#">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if post.statusPage.has_next %}
<li><a href="#"><span uk-pagination-next></span></a></li>
{% else %}
<li><a><span uk-pagination-next></span></a></li>
{% endif %}
</ul>
{% endif %}
在模板旁边,有多个发布对象
post
每个帖子都有自己的表格和分页器:
post.statusPage
是帖子的页面对象。
答案 0 :(得分:2)
考虑使用DataTables。而不是自己建立分页并处理遇到的复杂性。
您可以在单个视图上放置多个表,并且每个表的分页都是通过javascript处理的,而URL并未实际更改。您可以使用标准django模板标记将值插入表中,也可以构建简单的API(使用DRF或django的JSON库)以通过Ajax馈入表。这有点高级,但是当您有大量数据时,它可以确保您不会立即将所有数据发送给用户并占用系统内存。
答案 1 :(得分:1)
我不确定我知道您要执行的操作,但是看来您的视图返回了一组完整的表,并且您希望用户一次可以查看一个表。在两者之间单击,而不是永远向下滚动。您不想点击其他URL,因此需要在客户端浏览器中进行处理,这意味着这不是Django问题,因此也不是Django解决方案。 (称它为分页,但又希望它们都出现在相同的URL并因此是相同的网页上,这有点令人困惑。)
最简单的方法可能是切换'show-hide' html divs,即为每个页面创建一个按钮。因此,每个页面都被呈现,但是有选择地呈现。您必须修改那里的小脚本以将所有其他页面设置为隐藏。 抱歉,您的情况没有更好的例子。可能有很多更优雅的javascript大量解决方案,但是我不能为您提供建议。
如果您愿意发送带有下一页Get请求的查询字符串,则可以通过创建包含'?param ='类型页码的链接来完全使用Django解决此问题。然后可以从'request.GET.getlist('param')'获取参数以返回正确的页面。但是,如果您的视图现在返回了所有内容,则您可能不想参与生成和处理查询字符串。