Джанго - Пагинация в Джанго 1.3 - PullRequest
0 голосов
/ 22 ноября 2011

Я новичок в Джанго. Я использую простую нумерацию страниц, которую обеспечивает Django, но мне нужно разбить страницы на страницы следующим образом:

Пред. 1 2 3 4 5 6 ... 320

Или

Предыдущая 120 121 122 123 Последняя

Есть некоторый код, готовый к повторному использованию в Django 1.3 для достижения этой цели?

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Предположим, у нас есть представление:

dev showPage(request,pg):

, где pg - номер страницы, которую вы смотрите в данный момент.Затем нам нужно немного кода, чтобы получить набор запросов (или объекты) и создать объект paginator:

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(), ) )

теперь отправляет pags на ваш шаблон.И сделать что-то вроде:

<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%}
1 голос
/ 22 ноября 2011

Это то, что вы ищете.

...