지금까지 만든 웹사이트에는 사실 한 가지 결함이 있다. 위와 같이 게시물의 번호가 페이지에 무관하게 1부터 시작한다. 정상적인 게시물의 번호는 1페이지의 맨 위의 게시물의 번호가 게시물의 총 갯수와 같으며 그 이후로 1씩 줄어야 한다.
그렇다면 게시물의 번호는 <전체 페이지 수> - <시작 인덱스> - <게시물 인덱스> + 1 이 된다. 여기서 시작 인덱스는
해당 페이지의 첫 게시물의 번호이다. 1페이지라면 시작 인덱스는 1, 2페이지라면 11이 된다.
1. 템플릿 필터 작성
게시물 번호 공식을 템플릿 코드에 적용하기 위해서는 페이징 영역의 페이지 표시범위를 전후 5 페이지 까지로
제한했을 때 처럼 | add:5 와 같은 템플릿 필터를 사용해야한다. 문제는 add 는 값으로 변수를 넘겨줄 수 없다는 것이다.
먼저 원하는 값 만큼을 뺄 수 있는 템플릿 코드를 직접 작성해보자.
먼저 pybo 앱 디렉터리 하위에 템플릿 필터 파일을 저장할 templatetags 디렉터리를 생성한다.
생성한 디렉터리에 pybo_filter.py 파일을 생성한 뒤 위와 같이 작성한다. 데코레이터 @register.filter 를 추가하는 것으로
sub 함수를 필터로 추가할 수 있다.
2. 템플릿 필터 적용
이제 question_list.html 에서 위와 같이 pybo_filter 파일을 추가하고 sub 태그와 add 태그를 사용하여 게시물 번호를
미리 구해둔 공식에 따라 계산해준다.
사이트에 접속해보면 정상적으로 게시물 번호 오류가 수정된 것을 확인할 수 있다.
'개인 프로젝트 > Django-mysite' 카테고리의 다른 글
#18 로그인/로그아웃 (0) | 2021.09.30 |
---|---|
#17 답글 갯수 표시 (0) | 2021.09.28 |
#15 페이징 (0) | 2021.09.24 |
#14 내비게이션 바 (0) | 2021.09.24 |
#13 데이터 저장 2 (0) | 2021.09.23 |