🔍 블로그 검색 기능 구현하기
사용자가 작성한 블로그 글 중 제목 또는 본문에 특정 키워드가 포함된 글을 검색할 수 있는 기능입니다. 페이지네이션과 함께 작동하여, 검색 결과가 여러 페이지에 걸쳐 있을 경우에도 검색어가 유지되도록 구성합니다.
1️⃣ 검색 폼 추가 (blog_list.html)
<!-- blog_list.html 상단 -->
<form method="get" style="margin-bottom: 10px;">
<input name="q" type="text" placeholder="검색어를 입력하세요." value="{{ request.GET.q }}">
<button>검색</button>
</form>
📌 name="q"인 input 필드를 통해 검색어를 GET 방식으로 전달
📌 value="{{ request.GET.q }}를 설정하여 검색어가 유지되도록 처리
2️⃣ 검색 로직 구현 (views.py)
from django.db.models import Q
from django.core.paginator import Paginator
def blog_list(request):
blogs = Blog.objects.all().order_by('-created_at')
# 🔍 검색어 필터링
q = request.GET.get('q')
if q:
blogs = blogs.filter(
Q(title__icontains=q) |
Q(content__icontains=q)
)
paginator = Paginator(blogs, 10)
page = request.GET.get('page')
page_object = paginator.get_page(page)
context = {
'page_object': page_object
}
return render(request, 'blog_list.html', context)
📌 icontains를 사용하여 대소문자 구분 없이 검색
📌 Q() 객체로 제목과 본문 모두 조건에 포함
3️⃣ 검색어를 페이지네이션에 유지하기
<a href="?page=1{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">« 첫번째</a>
<a href="?page={{ page_object.previous_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">이전</a>
...
<a href="?page={{ i }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">{{ i }}</a>
...
<a href="?page={{ page_object.next_page_number }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">다음</a>
<a href="?page={{ page_object.paginator.num_pages }}{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">마지막 »</a>
📌 검색 후 페이지를 넘겨도 검색어가 유지되어야 하므로 &q=검색어를 URL에 계속 포함시킴
✅ 요약 체크리스트
항목 구현 여부
검색 대상 | ✅ 제목과 본문 모두 포함 (Q 객체) |
검색 입력창 | ✅ GET 방식 입력 폼 구성 |
검색어 유지 | ✅ 입력창 value, URL 파라미터로 유지 |
페이지 이동 시 검색 유지 | ✅ 쿼리스트링에 &q=검색어 포함 |
💬 검색은 사용자가 원하는 정보를 빠르게 찾기 위한 핵심 기능입니다. Django의 Q 객체와 GET 파라미터 조합을 통해 간단하면서도 유연하게 구현할 수 있어요!
'Django' 카테고리의 다른 글
Chapter 5-2 📌 Django CBV - ListView로 블로그 목록 + 검색 + 페이지네이션 구현하기 (0) | 2025.05.08 |
---|---|
Chapter 5-1 📌 Django Class-Based Views (CBV) 완전 정복 가이드 (0) | 2025.05.08 |
Chapter 4-7 Django 블로그 삭제 기능 만들기 (0) | 2025.05.07 |
Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기 (0) | 2025.05.07 |
Chapter 4-4 Django 블로그 수정 기능 구현 (작성자만 수정 가능) (0) | 2025.05.07 |