Chapter 4-6 Django 블로그 검색 기능 구현하기

2025. 5. 7. 10:38·Django

🔍 블로그 검색 기능 구현하기

사용자가 작성한 블로그 글 중 제목 또는 본문에 특정 키워드가 포함된 글을 검색할 수 있는 기능입니다. 페이지네이션과 함께 작동하여, 검색 결과가 여러 페이지에 걸쳐 있을 경우에도 검색어가 유지되도록 구성합니다.


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 %}">&laquo; 첫번째</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 %}">마지막 &raquo;</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
'Django' 카테고리의 다른 글
  • Chapter 5-2 📌 Django CBV - ListView로 블로그 목록 + 검색 + 페이지네이션 구현하기
  • Chapter 5-1 📌 Django Class-Based Views (CBV) 완전 정복 가이드
  • Chapter 4-7 Django 블로그 삭제 기능 만들기
  • Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (702)
      • Python (32)
      • 프로젝트 (43)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (40)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 4-6 Django 블로그 검색 기능 구현하기
상단으로

티스토리툴바