2012-10-31 25 views

回答

0

我会做如下:

从数据库统计条目总数和传递给模板,这将是124。然后使用页面限制来限制每页总条目的数量。然后计数并显示你想要的。

1

解决方案:

使用PAGINATE模板标签,电话{%get_pages%},并设定总的结果是这样一个变量之后:

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

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

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

{% endwith %} 
0

我已经写我自己的自定义标签通过使用现有的标签此事:

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 {} 

而且我有以下show_more.html模板:

{% 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 %} 

如何使用:

{% 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 

你要通过per_page_count,使用的查询集或列表total_countverb对象的总数。

1

人们倾向于过分复杂这一点。我发现current_start_index和current_end_index函数在源代码中有很好的文档记录(但不是在实际的文档中)。

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

{{pages.current_start_index}}通过{{pages.current_end_index}}的{{pages.total_count}}结果

希望这可以帮助别人:d