【问题标题】:Django: Pagination without changing url?Django:不更改网址的分页?
【发布时间】:2019-01-03 22:12:42
【问题描述】:

我从这个链接学习了 Django 的分页基础知识: https://simpleisbetterthancomplex.com/tutorial/2016/08/03/how-to-paginate-with-django.html

但是!我唯一的问题是我想在不更改 url 的情况下进行分页。

也就是说,我的意思是当 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

是帖子的页面对象。

【问题讨论】:

    标签: python html django html-table pagination


    【解决方案1】:

    我不确定我知道您要做什么,但您的视图似乎返回了一组完整的表格,并且您希望用户能够一次查看一个表格,并带有在两者之间单击,而不是永远向下滚动。你不想点击不同的 URL,所以这需要在客户端浏览器中处理,这意味着这不是 Django 问题,因此不是 Django 解决方案。 (将其称为分页但又希望所有内容都出现在同一个 URL 并因此成为同一个网页有点令人困惑。)

    您现在最简单的方法可能是切换'show-hide' html divs,即为每个页面创建一个按钮。因此,每个页面都被呈现但有选择地呈现。您必须修改那里的小脚本以将所有其他页面设置为隐藏。 很抱歉,对于您的具体情况,我没有更好的例子。可能有一堆更优雅的 javascript-heavy 解决方案,但我不能就这些给你建议。

    如果您愿意为下一页发送带有 Get 请求的查询字符串,您可以使用 Django 完全解决这个问题,方法是创建包含 '?param=' 类型页码的链接。然后可以从'request.GET.getlist('param')'中获取参数以返回正确的页面。但是,如果您的视图现在返回所有内容,您可能不想生成和处理查询字符串。

    【讨论】:

      【解决方案2】:

      与其自己构建分页并处理您遇到的复杂性,不如考虑使用DataTables

      您可以在一个视图上放置多个表格,每个表格的分页通过 javascript 处理,而 URL 没有实际变化。您可以使用标准 django 模板标签将值插入表中,也可以构建一个简单的 API(使用 DRF 或 django 的 JSON 库)通过 Ajax 提供表。这有点高级,但是当您有大量数据时,它可以确保您不会一次将所有数据都发送给用户并占用系统内存。

      【讨论】:

        猜你喜欢
        • 2013-10-21
        • 2017-11-06
        • 2010-12-26
        • 1970-01-01
        • 2016-12-06
        • 2023-03-04
        • 2019-11-15
        • 1970-01-01
        • 2023-03-25
        相关资源
        最近更新 更多