如何在 django 模板中设置页面范围的索引
Posted
技术标签:
【中文标题】如何在 django 模板中设置页面范围的索引【英文标题】:how to set index of page range in django templates 【发布时间】:2015-01-18 21:00:18 【问题描述】:我有以下循环遍历我的分页对象:
% 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
【问题讨论】:
【参考方案1】:您可以从视图中呈现最小和最大限制:
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
【讨论】:
我知道这是几年前发布的,但我很好奇 all.number 的作用,例如:min = all.number - 4
?我在 Google 上搜索并在内置函数中找到了“all”,但格式为:all(iterable)
,这与您在上面的编写方式不同。【参考方案2】:
我最终这样做了:
% 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]
这和谷歌的分页完全一样。
【讨论】:
以上是关于如何在 django 模板中设置页面范围的索引的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 模板中的“带有模板标签”中设置 Django 渲染块值?