본문 바로가기
Django

django paginator 페이지 수 제한하기

by 이농이능 2018. 2. 20.

Django 에서는 paginator 를 이용해서 데이터를 paging 처리하는 것이 가능하다. 

이전에 paging을 하는 방법에 대해서 포스팅을 했었다.


(☞paginator 관련 포스팅 : http://wangin9.tistory.com/entry/Django-%ED%85%8C%EC%9D%B4%EB%B8%94-paginator?category=784811)



이때 정리해놓은 것을 잘 이용하던 도중에, 생각지 못한 일이 발생했다. 페이지수가 맣아지니 한 화면에 이렇게 지저분하게 

보여지게 된다는 것이다.




paginator를 이용하면 알아서 페이징 처리를 해주긴 하지만,, 페이지수를 제한해서 보여주는 기능은 없다는 사실!

찾아보니 따로 기능을 제공해주고 있지 않기에 약간의 수정을 통해서 페이지 수를 제한해보았다.


(참고 : https://stackoverflow.com/questions/30864011/display-only-some-of-the-page-numbers-by-django-pagination)



완성된 모습을 보여드리자면,


첫번째 페이지와 마지막 페이지를 보여주고 

현재 페이지와 이전과 다음페이지 각각 2개씩 총 5개의 페이지를 보여주게 하였다.





#코드설명



views.py



index 는 url에서 page= 다음에 들어오는 숫자, max_index는 마지막 페이지이다.

그리고 start_index, end_index 가 있는데 

여기서 3이 start_index, 7이 end_index를 의미한다.


그리고 사진처럼, 마지막 페이지를 표시하기 위해서 max_index 값을 전달해주는데 여기서 -2를 해준 이유는 화면 코드에서 설명하겠다.



compare_line.html


기존의 포스팅했던 글에서 추가된 부분은 두가지인데

 {% if result_list.number > 2  %}  

<li><a href="?page={{ 1 }}"> 1 </a></li> 

<li ><span>...<span class="sr-only">...</span></span></li>

{% endif %}

page number가 1이 보여지는 경우는, 현재 페이지가 1이거나 2일 때 이므로, 

3이후부터는 첫번째 페이지인 1 이 처음에 보여지게 하기 위한 부분이다.



다음은

 {% if result_list.number < max_index %}

<li ><span>...<span class="sr-only">...</span></span></li>

<li><a href="?page={{ max_index|add:'2' }}">{{ max_index|add:"2" }}</a></li>

{% endif %}

이부분이다. 


원래 원하던 코드는 if result_list.number < max_index -2 를 하는 것이었지만 

django의 html에서 tag 안에서의 연산자를 이용한(+/-/*/....) 계산은 지원이 안되고 변수 뒤에 max_index|add:"2 이런식으로 해야된다. 


(참고 : https://docs.djangoproject.com/en/dev/ref/templates/builtins/#add)



마지막 index가 보여지는 경우일 때 뒤에 나오지 않게 하기 위해서는 max_index -2 를 해준 값이 필요하기 때문에 

views에서 -2한 값을 보내주고 

 <li><a href="?page={{ max_index|add:'2' }}">{{ max_index|add:"2" }}</a></li>

마지막 페이지를 보여줄 때 +2를 해주었다.


맨첫번째 페이지와 맨 마지막 페이지 전에 공백을 주고 클릭이 되지 않게 하기 위해서 span=class="sr-only" 안에 ... 을 넣어주었다.



이렇게 하면 끄읏=3



'Django' 카테고리의 다른 글

django query  (0) 2018.03.28
[django] ajax 사용해서 화면 수정  (2) 2018.03.19
[django celery]테스크 주기 설정하기  (1) 2018.02.02
[Django] Celery Redis 설치  (0) 2018.01.30
python 파일 존재여부  (0) 2018.01.29