1

我正在使用 django 的无休止的分页搜索结果,我想在顶部创建一条消息,简单地说明,例如:

showing 20 results of 124

甚至更好:

showing results 20 to 40 of 124

在无尽的分页文档中,我看不到任何获取当前结果数量的方法。你会怎么做?

4

4 回答 4

1

人们倾向于把这个复杂化。我发现你的 current_start_index 和 current_end_index 函数在源代码中有很好的记录(但在实际文档中没有)。

以下是您将如何使用它们来实现这一目标。

{{ pages.current_start_index }} 到 {{ pages.current_end_index }} {{ pages.total_count }} 个结果

希望这可以帮助某人:D

于 2014-10-13T13:24:43.233 回答
1

解决方案:

使用分页模板标签后,调用 {% get_pages %} 并将总结果设置为如下变量:

{% paginate items %}
{% get_pages %}
{% with total=pages.total_count %}

<div>Total results: {{ total }}</div>

{% for item in items %}
 ...
{% endfor %}

{% endwith %}
于 2013-07-30T15:24:28.857 回答
0

I have wrote my own custom tag for that matter by using the existing tag:

from endless_pagination import (
    settings,
    utils,
)


@register.inclusion_tag("endless_pagination/show_more.html", takes_context=True)
def show_more_with_counts(context, per_page_count, total_count, first_page_count=0,
    verb='enteries', loading=settings.LOADING, show_total_in_end=True):
    # This template tag could raise a PaginationError: you have to call
    # *paginate* or *lazy_paginate* before including the showmore template.
    data = utils.get_data_from_context(context)
    page = data['page']
    # show the template only if there is a next page
    if page.has_next():
        request = context['request']
        page_number = page.next_page_number()
        # Generate the querystring.
        querystring_key = data['querystring_key']
        querystring = utils.get_querystring_for_page(
            request, page_number, querystring_key,
            default_number=data['default_number'])
        curr_page_num = int(request.GET.get(querystring_key, 1))
        if curr_page_num == 1:
            if first_page_count:
                start = first_page_count + 1
            else:
                start = per_page_count + 1
        else:
            if first_page_count:
                start = (curr_page_num * per_page_count) - first_page_count
            else:
                start = (curr_page_num * per_page_count) + 1
        end = (per_page_count + start) - 1
        if end > total_count:
            end = total_count
        label = 'Load %(start)s to %(end)s of %(total)s %(verb)s' % {
            'start': start, 'end': end, 'total': total_count, 'verb': verb}
        return {
            'label': label,
            'loading': loading,
            'path': data['override_path'] or request.path,
            'querystring': querystring,
            'querystring_key': querystring_key,
            'request': request,
            'show_total_in_end': show_total_in_end,
        }
    else:
        if total_count > 0:
            return {
                'label': 'Showing %(start)s of %(end)s %(verb)s' % \
                    {'start': total_count, 'end': total_count, 'verb': verb},
                'show_total_in_end': show_total_in_end,
            }
        else:
            return {}

Also I have following show_more.html template:

{% load i18n %}
{% if querystring %}
    <div class="endless_container">
        <a class="endless_more" href="{{ path }}{{ querystring }}"
            rel="{{ querystring_key }}" style="font-size: 11px; color: #c13923;">{{ label }}</a>
        <div class="endless_loading" style="display: none;">{{ loading|safe }}</div>
    </div>
{% elif show_total_in_end %}
    <a href="#" style="text-decoration: none; color: #999; cursor:default; font-size: 11px;" onclick='return false;'>{{ label }}</a>
{% endif %}

How to use:

{% show_more_with_counts 10 qs_count verb='users' %}
# it will say `Load 1 to 10 of 100 users` for first page
# it will say `Load 11 to 20 of 100 users` for 2nd page, and so on

You have to pass per_page_count, total number of objects in a queryset or list total_count, and the verb to use.

于 2013-10-10T18:00:08.597 回答
0

我会这样做:

计算数据库中的条目总数并传递给模板124。然后使用分页限制来限制每页的总条目数。数一数,随心所欲地展示。

于 2013-03-14T09:17:07.890 回答