Django:分页而不更改url?

时间:2018-07-26 20:18:42

标签: python html django html-table pagination

我从以下链接中学到了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

是帖子的页面对象。

2 个答案:

答案 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')'获取参数以返回正确的页面。但是,如果您的视图现在返回了所有内容,则您可能不想参与生成和处理查询字符串。