Search 기능 구현!

게시판 검색 구현을 시작한다!

POST로 검색 값을 받았다.

그리고 게시판의 제목, 내용, 작성자를 검색 옵션으로 잡았지만,

일단 통합 검색이므로 django Q를 이용하여 query를 OR 연산했다.

1
2
3
4
5
6
7
8
9
search_keyword = request.POST.get('search', request.GET.get('search', None))

if search_keyword:
q = Q(title__icontains=search_keyword)
q |= Q(text__icontains=search_keyword)
q |= Q(author__username__icontains=search_keyword)

documents = documents.filter(q)
context_data.update({'search_keyword': search_keyword})

그런데 pagination에서 문제가 생겼다(?)

예를 들어 지금 총 페이지 개수가 5페이지라고 하자.

그리고 검색을 한 뒤에는 총 2페이지가 될 수 있다.

그런데 검색을 하기 전에 내가 이미 3페이지에 머물러 있었다면?

검색을 하고 난 뒤에는 총 2페이지인데 나는 3페이지에 있으니 오류가 난다.

그래서 다음과 같이 추가해줬다.

1
2
3
# 총 페이지 수 보다 넘은 상태인 경우, 1페이지로 변경
if page > paginator.num_pages:
page = 1
Share