Django
Chapter 11-2 Django 인스타그램 프로젝트 - 검색 기능 구현 정리
Chansman
2025. 5. 16. 15:37
📌 Django 인스타그램 프로젝트 - 검색 기능 구현 정리
✅ 검색 기능 개요
search() 뷰는 사용자가 입력한 검색 조건에 따라 사용자 닉네임 또는 게시글 태그를 기준으로 검색 결과를 필터링하여 반환합니다.
🧱 뷰 함수 코드 구조 (post/views.py)
from django.contrib.auth import get_user_model
User = get_user_model()
@csrf_exempt
@login_required()
def toggle_like(request):
... # 좋아요 처리 로직 (생략)
# 검색 처리 뷰
def search(request):
search_type = request.GET.get('type') # 'user' 또는 'tag'
q = request.GET.get('q', '')
if search_type in ['user', 'tag'] and q:
if search_type == 'user':
object_list = User.objects.filter(nickname__icontains=q)
else:
object_list = Post.objects.filter(tags__tag=q)
context = {
'object_list': object_list
}
return render(request, f'search/search_{search_type}.html', context)
return render(request, 'search/search.html')
🔍 상세 설명
항목 설명
request.GET.get('type') | 검색 타입 구분: 'user' 또는 'tag' |
request.GET.get('q') | 검색어 입력값 (기본값은 빈 문자열) |
nickname__icontains=q | 대소문자 구분 없이 닉네임 포함 검색 (User 모델) |
tags__tag=q | 태그 문자열이 일치하는 Post 검색 (ManyToMany 필드 기준) |
📁 템플릿 분기 처리
return render(request, f'search/search_{search_type}.html', context)
- 검색 타입에 따라 템플릿이 다음과 같이 분리됩니다:
- search/search_user.html: 사용자 검색 결과
- search/search_tag.html: 태그 기반 게시물 검색 결과
✅ search.html (초기화면)
<!-- search/search.html -->
<form method="get" action="/search/">
<input type="text" name="q" placeholder="검색어를 입력하세요">
<select name="type">
<option value="user">사용자</option>
<option value="tag">태그</option>
</select>
<button type="submit">검색</button>
</form>
💡 확장 아이디어
기능 설명
AJAX 검색 | 입력 도중 자동 완성 기능 구현 가능 (js 기반) |
검색 히스토리 저장 | 최근 검색어 캐시 또는 DB에 저장 후 추천 기능 |
인기 검색어 | 검색된 횟수를 기준으로 랭킹화 가능 |
해시태그 클라우드 | 자주 등장하는 태그를 시각적으로 보여주기 |
🧠 요약
항목 설명
type 파라미터 | 'user' 또는 'tag' 검색 타입 지정 |
q 파라미터 | 검색어 문자열 입력 |
검색 대상 | User.nickname 또는 Post.tags.tag |
결과 템플릿 | search_user.html, search_tag.html 분기 처리 |
검색 기능은 단순한 필터링부터 시작해, 추천 시스템이나 인기 키워드 분석 등으로 확장할 수 있습니다. 시작은 단순하게, 확장은 전략적으로 💡