단계 1: 프로젝트 및 앱 설정
django-admin startproject search_example # 프로젝트 생성
cd search_example # 프로젝트로 이동
python manage.py startapp myapp # 프로젝트 내 앱 생성
haystack + 연결할 검색라이브러리인 Whoosh 설치
pip install django-haystack
pip install Whoosh
헤이스탁 설치시 오류나면
search_example(프로젝트)경로에 requirements.txt생성하고 아래처럼 입력
Django==3.2.6
django-haystack==3.0
그리고 명령어 입력으로 해당 프로그램들 설치
pip install -r requirements.txt
settings.py 파일에 설치한 앱 추가INSTALLED_APPS = [
# ...
'haystack',
'myapp',
# ...
]
python manage.py migrate
단계 2: 모델 생성
myapp/models.py 파일에 간단한 모델을 생성함from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
publication_year = models.PositiveIntegerField()
def __str__(self):
return self.title
python manage.py makemigrations myapp
python manage.py migrate
단계 3: Haystack 설정
myapp/search_indexes.py 파일을 생성함from haystack import indexes
from .models import Book
class BookIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
def get_model(self):
return Book
def index_queryset(self, using=None):
return self.get_model().objects.all()
templates 디렉토리를 생성하고templates/search/indexes/myapp/book_text.txt 파일을 생성함{{ object.title }}
{{ object.content }}
settings.py 파일에 헤이스탁설정을 추가import os
...
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
},
}
단계 4: 검색 뷰 생성
myapp/views.py 파일에 검색 뷰를 생성from django.shortcuts import render
from haystack.query import SearchQuerySet
def search_view(request):
query = request.GET.get('q')
results = []
if query:
results = SearchQuerySet().filter(text=query)
context = {'results': results}
return render(request, 'myapp/search_results.html', context)
myapp/templates/myapp 디렉토리를 생성하고 그 안에 base.html파일과 search_results.html 파일을 생성
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
<header>
<h1>도서검색</h1>
<nav>
<a href="{% url 'search_view' %}">다시 검색하기</a>
</nav>
</header>
<main>{% block content %}{% endblock %}</main>
<footer>
<p>© 2023 yewonlee</p>
</footer>
</body>
</html>
{% extends "./base.html" %} {% block content %}
<form method="GET" action="{% url 'search_view' %}">
<input type="text" name="q" placeholder="제목 혹은 저자 키워드" />
<button type="submit">Search</button>
</form>
<ul>
{% for result in results %}
<li>{{ result.object.title }}</li>
{% endfor %}
</ul>
{% endblock %}
단계 5: URL 설정
myapp/urls.py 파일에 검색 뷰를 위한 URL을 추가from django.urls import path
from . import views
urlpatterns = [
path('', views.search_view, name='search_view'),
]
프로젝트 레벨의 urls.py파일에 myapp의 url연결
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')),
]
from django.contrib import admin
from .models import Book
admin.site.register(Book)
슈퍼유저 생성
python manage.py createsuperuser
서버 실행 후 http://127.0.0.1:8000/admin/에 접속해서 데이터 추가!
헤이스탁은 검색엔진을 사용하기 떄문에 데이터를 인텍싱하는 것이 필요함!
명령어 입력(데이터 바뀔때마다 해주어야 함)
python manage.py rebuild_index
끝! 서버 실행!
python manage.py runserver
https://startbootstrap.com/templates?showAngular=false&showVue=false&showPro=false