[英]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 }}&{% 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 }}&{% 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.