为了账号安全,请及时绑定邮箱和手机立即绑定

Django Pagination - 重新分组并显示每页的时间组?

Django Pagination - 重新分组并显示每页的时间组?

素胚勾勒不出你 2022-06-14 09:47:57
我目前正在重新组合一些数据,然后在列中显示这些数据,同时还使用分页。但是,由于原始数据的排序,在某些情况下,第 1 列有 1 个条目,但实际上总共有 5 或 6 个条目,但它们会在不同的页面上,是否可以重新组合数据,以便每页的项目是由分组项目的数量所占据的?我考虑过在将数据发布到页面之前对数据进行排序,但那样只会显示每页一列类型(可能有 1 或 n 个类型/列,id 喜欢在一页上)注:以下样本数据并非实际数据,下面的例子希望能让事情更清楚原始数据:  ID       Type      Item----------------------------  9        Fruit     Apple      15       Meat      Beef      18       Fruit     Lemon      99       Fruit     Orange     9        Fruit     Grape      77       Meat      Chicken    分页和分组数据当前输出 Meat          Fruit-------       ------- Beef          Apple               Lemonpage 1 of 2 (3 items per page) Meat          Fruit-------       ------- Chicken       Orange               Grapepage 2 of 2 (3 items per page)期望的输出 Meat          Fruit-------       ------- Beef          AppleChicken        Lemon               Orangepage 1 of 2 (3 items per group per page) Meat          Fruit-------       -------               Grapepage 2 of 2 (3 items per group per page)这是我当前的模板:{% include 'search/page_nav.html' %}{% with results.object_list as results_list %}    {% regroup results_list|dictsort:"model_name" by model_name as grouped_objects %}    {% for ct in grouped_objects %}        <div class="col-4">            <h3 class="text-capitalize">{{ ct.grouper }}'s</h3>            {% for result in ct.list %}            <div class="col-12 results">                <div class="pt-4 border-bottom">                    <a class="page-url h4 text-primary" href="{{ result.object.get_absolute_url }}">{{ result.object.get_search_title }}</a>                    <p class="page-description mt-1 text-muted"> {{ result.object.get_search_text|safe }}</p>                </div>            </div>            {% endfor %}        </div>    {% empty %}        <p class="lead">Although I am a guru, I am lacking sentience. One must ask a specific question to recieve a specific answer.</p>    {% endfor %}{% endwith %}{% include 'search/page_nav.html' %}
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

我最终只是将 sqs 查询发布到排序的 Django 模板,然后重新组合并使用查询对每一列进行分页。


下面的示例:


<div class="col-lg-12">

    <div class="row">

    {% if query %}

        {% regroup results|dictsort:"model_name" by model_name as grouped_objects %}

        {% for ct in grouped_objects %}

            <div class="col-6 col-lg-3">

                <h3 class="text-capitalize">{{ ct.grouper|friendly_search_name }}</h3>

                <ul id="pager_{{ ct.grouper }}" class="pagination-sm mt-1"></ul>

                <div id="pager_content_{{ ct.grouper }}">

                    {% for result in ct.list %}

                    <div class="col-12 results item">

                        <div class="pt-4 border-bottom">

                            <a class="page-url h4 text-primary" href="{{ result.object.get_absolute_url }}">{{ result.object.get_search_title }}</a>

                            <p class="page-description mt-1 text-muted"> {{ result.object.get_search_text|safe }}</p>

                        </div>

                    </div>

                    {% endfor %}

                </div>

            </div>

        {% empty %}

            <p class="lead">Although I am a guru, I am lacking sentience. One must ask a specific question to recieve a specific answer.</p>

        {% endfor %}

    {% else %}

        {# Show some example queries to run, maybe query syntax, something else? #}

    {% endif %}

    </div>

</div>

jQuery:


{% block extrajs %}

<script src="{% static 'scripts/twbs-pagingation/jquery.twbsPagination.js' %}" type="text/javascript"></script>

<script type="text/javascript">

window.jQuery(function(){

    var items_per_page = 4;

    function hide_all(child) {

        child.removeClass('active');   

    }

    function show_page(child, num, items_per_page) {

        hide_all(child);

        child.slice((num-1)*items_per_page, num*items_per_page).addClass('active');

    }

{% regroup results|dictsort:"model_name" by model_name as grouped_objects %}

{% for ct in grouped_objects %}   

    var $content_{{ ct.grouper }} = $('#pager_content_{{ ct.grouper }}');

    var $child_{{ ct.grouper }} = $content_{{ ct.grouper }}.children();

    $('#pager_{{ ct.grouper }}').twbsPagination({

        totalPages: Math.ceil($child_{{ ct.grouper }}.length/items_per_page),

        visiblePages: 5,

        onPageClick: function (event, page) {

            show_page($child_{{ ct.grouper }}, page, items_per_page);

        }

    });

{% endfor %}

});

</script>

{% endblock extrajs %}

{% block extrastyle %}

<style type="text/css">

.item {

    display: none;

}

.item.active {

    display: block;   

}

</style>

{% endblock extrastyle %}


查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信