【问题标题】:Django - Pagination in Django 1.3Django - Django 1.3 中的分页
【发布时间】:2011-11-21 20:48:33
【问题描述】:

我是 Django 新手。我正在使用 Django 提供的简单分页,但我需要像这样对页面进行分页:

上一页 1 2 3 4 5 6 ... 320

或者

上一页 120 121 122 123 最后一页

有一些代码准备好在 Django 1.3 中重用来实现这一点吗?

【问题讨论】:

标签: django django-pagination


【解决方案1】:

假设我们有一个视图:

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

【讨论】:

    【解决方案2】:

    This is 你在找什么。

    【讨论】:

    • this。无需额外的软件包。
    猜你喜欢
    • 2011-10-24
    • 2011-08-05
    • 1970-01-01
    • 2023-03-22
    • 2011-07-17
    • 2012-01-21
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多