我是 Django 的新手。我正在使用 Django 提供的简单分页,但我需要像这样对页面进行分页:
上一页 1 2 3 4 5 6 ... 320
或者
上一页 120 121 122 123 最后一页
有一些代码准备好在 Django 1.3 中重用来实现这一点吗?
我是 Django 的新手。我正在使用 Django 提供的简单分页,但我需要像这样对页面进行分页:
上一页 1 2 3 4 5 6 ... 320
或者
上一页 120 121 122 123 最后一页
有一些代码准备好在 Django 1.3 中重用来实现这一点吗?
这就是你要找的。
假设我们有一个视图:
dev showPage(request,pg):
其中 pg 是您此时正在查看的页码。然后我们需要一些代码来获取查询集(或对象)并创建分页器对象:
pg = int(pg)
objects = range(320)
p = Paginator(objects, 15)
page = p.page(pg)
那么,你需要得到:
Prev 1 2 3 4 5 6 ... 320
向模板发送一个类似pags的列表:
pags = [] #var to be sent to template
if pg-1 in p.page_range: pags.append( ( 'Prev', p.page( pg - 1) , ) )
for n in range( pg-2, pg+2):
if n in p.page_range: pags.append( ( n, p.page( pg - 2) , ) )
if p.end_index() not in range( pg-2, pg+2):
pags.append( ( '...', None , ) )
pags.append( ( p.end_index(), p.end_index(), ) )
现在将页面发送到您的模板。并渲染为:
<ul>
{% for label, npag in pags %}
<li>
{%if npag %} <a href="asjflasdjf/{{npag}"}>{%endif%}
label
{%if npag %} </a> {%endif%}
</li>
{% endfor %}
</ul>
为了
Prev 120 121 122 123 124 Last
解决办法是一样的。用css装饰一点,你就明白了。
此外,例如,您可以为当前页面分配一个类,以便使其以粗体样式显示:
{%if npag %}
<a href="asjflasdjf/{{npag}"
{% if npag == pg %} class="bold-style" {%endif%}
}>
{%endif%}