티스토리 뷰
장고에서는 테이블에 대한 복잡한 쿼리를 처리하기 위한 Q 객체를 제공한다.
이 객체를 사용하면 웹 서비스에서 검색 기능을 쉽게 구현할 수 있다.
검색할 모델(테이블)은 이미 구현되어있다고 가정한다.
나는 Post 테이블을 검색하도록 구현하였다.
url pattern : /search/
form : SearchForm
view : SearchFormView
template : search.html
urls.py
# 생략 ..
url(r'^search',SearchFormView.as_view(),name='search')
url 패턴을 설정해준다.
forms.py
from django import forms
class SearchForm(forms):
word = forms.Charfield(label='Search Word')
template에 보일 form을 구현한다.
views.py
from blog.forms import SearchForm
from django.views.generic.edit import FormView
from blog.models import Post
class SearchFormView():
form_class = SearchForm
template_name = 'blog/search.html'
def form_valid(self,form): # post method로 값이 전달 됬을 경우
word = '%s' %self.request.POST['word'] # 검색어
post_list = Post.objects.filter(
Q(title__icontains=word) | Q(content__icontains=word) # Q 객체를 사용해서 검색한다.
# title,context 칼럼에 대소문자를 구분하지 않고 단어가 포함되어있는지 (icontains) 검사
).distinct() #중복을 제거한다.
context = {}
context['object_list'] = post_list # 검색된 결과를 컨텍스트 변수에 담는다.
context['search_word']= word # 검색어를 컨텍스트 변수에 담는다.
return context
Q 객체를 사용하여 검색 기능 로직을 구현한다.
search.html
...
<form action="." method="post"> {% csrf_token %}
{{ form.as_p }} <!-- form -->
<input type="submit">
</form>
{% if object_list %} # 검색 결과가 있을 경우
{% for post in object_list %}
{<a href="{{ post.get_absolute_url }}">{{ post.title }}</a># 검색된 리스트를 보여준다.
{% endfor %}
{% elif search_word %} # 검색 결과가 없을 경우
Search Word {{ search_word }} Not Found! # 검색된 결과가 없다는 메세지를 보여준다.
{% endif %}
...
이렇게 검색 결과가 뜨는 것을 볼 수 있습니다.ㅎ
오류가 있으면 댓글 달아주세요.
'Framework > Django' 카테고리의 다른 글
template url parameter (0) | 2018.01.22 |
---|---|
View url parameter 가져오기 (0) | 2018.01.22 |
CBV success_url parameter (0) | 2018.01.16 |
You are trying to add a non-nullable field '필드명' to post without a default 해결 (0) | 2018.01.15 |
Django auth앱 사용하여 인증하기(로그인) (0) | 2018.01.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- jsp tomcat
- sass
- selenium 새 창 크롤링
- 후위 표기식
- 후위 표기법
- jsp oracle 연동
- 후위 표기법 계싼
- virtualenv
- 2진수 음수
- 계산기 구현
- 후위 표기 계산
- python virtualenv
- selenium 새 탭 크롤링
- 후위 표현식
- java String to int
- 음수 10진수 음수 2진수
- 중위 표기법 후위 표기법
- 전자계산기 구현
- java int to String
- jsp tomcat 연동
- java toString
- jsp 서버 연동
- 중위 표현식 후위 표현식
- selenium switch_to_window
- sass 사용법
- selenium switch_to_window python
- 2의 보수법
- 후위 표기 수식 계싼
- sass 설치
- java parseInt
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함