猿问

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

我目前正在重新组合一些数据,然后在列中显示这些数据,同时还使用分页。但是,由于原始数据的排序,在某些情况下,第 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

               Lemon


page 1 of 2 (3 items per page)


 Meat          Fruit

-------       -------

 Chicken       Orange

               Grape


page 2 of 2 (3 items per page)

期望的输出


 Meat          Fruit

-------       -------

 Beef          Apple

Chicken        Lemon

               Orange


page 1 of 2 (3 items per group per page)


 Meat          Fruit

-------       -------

               Grape


page 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' %}


素胚勾勒不出你
浏览 123回答 1
1回答

长风秋雁

我最终只是将 sqs 查询发布到排序的 Django 模板,然后重新组合并使用查询对每一列进行分页。下面的示例:<div class="col-lg-12">&nbsp; &nbsp; <div class="row">&nbsp; &nbsp; {% if query %}&nbsp; &nbsp; &nbsp; &nbsp; {% regroup results|dictsort:"model_name" by model_name as grouped_objects %}&nbsp; &nbsp; &nbsp; &nbsp; {% for ct in grouped_objects %}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div class="col-6 col-lg-3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <h3 class="text-capitalize">{{ ct.grouper|friendly_search_name }}</h3>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <ul id="pager_{{ ct.grouper }}" class="pagination-sm mt-1"></ul>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div id="pager_content_{{ ct.grouper }}">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {% for result in ct.list %}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div class="col-12 results item">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div class="pt-4 border-bottom">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a class="page-url h4 text-primary" href="{{ result.object.get_absolute_url }}">{{ result.object.get_search_title }}</a>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <p class="page-description mt-1 text-muted"> {{ result.object.get_search_text|safe }}</p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {% endfor %}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; {% empty %}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <p class="lead">Although I am a guru, I am lacking sentience. One must ask a specific question to recieve a specific answer.</p>&nbsp; &nbsp; &nbsp; &nbsp; {% endfor %}&nbsp; &nbsp; {% else %}&nbsp; &nbsp; &nbsp; &nbsp; {# Show some example queries to run, maybe query syntax, something else? #}&nbsp; &nbsp; {% endif %}&nbsp; &nbsp; </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(){&nbsp; &nbsp; var items_per_page = 4;&nbsp; &nbsp; function hide_all(child) {&nbsp; &nbsp; &nbsp; &nbsp; child.removeClass('active');&nbsp; &nbsp;&nbsp; &nbsp; }&nbsp; &nbsp; function show_page(child, num, items_per_page) {&nbsp; &nbsp; &nbsp; &nbsp; hide_all(child);&nbsp; &nbsp; &nbsp; &nbsp; child.slice((num-1)*items_per_page, num*items_per_page).addClass('active');&nbsp; &nbsp; }{% regroup results|dictsort:"model_name" by model_name as grouped_objects %}{% for ct in grouped_objects %}&nbsp; &nbsp;&nbsp; &nbsp; var $content_{{ ct.grouper }} = $('#pager_content_{{ ct.grouper }}');&nbsp; &nbsp; var $child_{{ ct.grouper }} = $content_{{ ct.grouper }}.children();&nbsp; &nbsp; $('#pager_{{ ct.grouper }}').twbsPagination({&nbsp; &nbsp; &nbsp; &nbsp; totalPages: Math.ceil($child_{{ ct.grouper }}.length/items_per_page),&nbsp; &nbsp; &nbsp; &nbsp; visiblePages: 5,&nbsp; &nbsp; &nbsp; &nbsp; onPageClick: function (event, page) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; show_page($child_{{ ct.grouper }}, page, items_per_page);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });{% endfor %}});</script>{% endblock extrajs %}{% block extrastyle %}<style type="text/css">.item {&nbsp; &nbsp; display: none;}.item.active {&nbsp; &nbsp; display: block;&nbsp; &nbsp;}</style>{% endblock extrastyle %}
随时随地看视频慕课网APP

相关分类

Python
我要回答