backend/django

장고 페이지네이션 구현하기

seul chan 2017. 4. 5. 23:54

## pagination 구현 

(https://docs.djangoproject.com/en/1.10/topics/pagination/#django.core.paginator.Paginator)


```

from django.core.pagination import Paginator


p = Paginator(posts, 5) # 이런식으로 사용

```



- views/list.py 수정해줘야함


```

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

# EmptyPage: 페이지가 범위를 넘어서면 (없는페이지인지)

# PageNotAnInteger: page parameter int 아닌 타입이 들어오면

...

p  = Paginator(posts, 5)

page = request.GET.get("page")


try:

posts = p.page(page)

except PageNotAnInteger:

posts = p.page(1)

except EmptyPage:

posts = p.page(p.num_pages)

...

```


- list templates 수정해주기 (페이지 표시)

```

<div class="pagination">

<span class="step-links">

{% if posts.has_previous %}

<a href="?page={{ posts.previous_page_number }}"> previous </a>

{% endif %}

<span class="current">

Page {{ posts.number }} of {{ posts.paginator.num_pages }}.

</span>

... # next도 previous와 똑같이 구현

</span>

</div>

```