簡體   English   中英

如何在django模板中設置頁面范圍的索引

[英]how to set index of page range in django templates

我有以下for循環遍歷我的分頁對象:

{% for x in my_paginator.paginator.page_range %}
    <a href="?{% if query %}q={{ query }}&amp;{% endif %}page={{ x }}"><u>{{ x }}</u></a> 

{% endfor %}

我想切出4個小於當前頁面的索引,4個大於當前頁面的值。

我可以得到這樣的當前頁面: {{ my_paginator.number }}

如果頁碼為“61”,輸出如下內容,如何獲得可以使用{{ x }}打印的范圍:

57 58 59 60 61 62 63 64 65

您可以從視圖中渲染最小和最大限制:

paginator = Paginator(yourqueryset, request.GET.get('show'))
if request.GET.get('page'):
    try:
      results = paginator.page(request.GET.get('page'))
    except PageNotAnInteger:
      results = paginator.page(1)
    except EmptyPage:
      results = paginator.page(paginator.num_pages)
else:
    results = paginator.page(1)
min = all.number - 4
max = all.number + 4
return render(request, 'template.html', {'results':results,'min':min,'max':max})

然后在模板中:

{% for page in results.paginator.page_range %}
   {% if page < max and page > min and page != results.number %}
      <a class="page">{{page}}</a>
   {% elif page == results.number %}
      <a>{{page}}</a>
   {% endif %}
{% endfor %}

然后你會有類似的東西:

57 58 59 60 61 62 63 64 65

我最終這樣做了:

{% for x in my_paginator|relative_page_list:"5" %}

                <a href="?{% if query %}q={{ query }}&amp;{% endif %}page={{ x }}"><u>{{ x }}</u></a> 

                    {% endfor %}

模板標記實現如下所示:

from django import template
import string

register = template.Library()

@register.filter(name='relative_page_list')
def relative_page_list(paginator, page_range):
    print 'arg: '+str(page_range)
    print 'page number: '+str(paginator.number)
    page_number = paginator.number
    last_page_number = paginator.paginator.page_range[-1]
    page_range = int(page_range)
    page_min = page_number - page_range
    page_max = page_number + page_range

    print 'min: '+str(page_min)
    print 'max: '+str(page_max)

    if page_min < 0:
        page_min = 0

    if page_max > last_page_number:
        page_max = last_page_number

    print page_min
    print page_max
    return paginator.paginator.page_range[page_min:page_max]

這與谷歌的分頁完全一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM