Django - 검색기능 구현
Web/Django

Django - 검색기능 구현

뉴비뉴 2019. 8. 7.

1. Django - 검색기능 구현

bootstrap 에서 navbar 를 가져와서 사용함으로 navbar 안에 있는 search 에다가 title(제목)을 입력하면 해당 title에 맞는 author text . . . 등을 가져오게 설정해보자.

base.html

<form class="form-inline my-2 my-md-0" method="get" action="{% url 'search' %}">
    <input class="form-control" type="text" placeholder="Search" aria-label="Search" name="b" value="{{b}}">
</form>

체크 된 부분에 Singapore를 입력하면 검색되도록

  • form method = "get" : url 창에 본인이 입력한 결과를 보이게 하면서 데이터를 가져온다는 뜻(?) {% csrf_token %}을 추가해주면 자세한 값들이 암호화(?) 되어 보여지게 된다.

  • action="% url 'search' %}%" : 해당 form 이 작동되게 하면 urls.py 안에 name 이 search인 것을 찾아가라

border/urls.py

path('border/search/', views.border_search, name='search'),
  • input value="{{b}}" 입력한 값은 b 객체(?) 에 저장시켜라 [ 여기서 만들어준 b 객체는 view 에서 사용된다 ]

border/views.py

def border_search(request):
    br = Border.objects.all() # 모든 Border 테이블의 모든 object들을 br에 저장하라

    b = request.GET.get('b','') # GET request의 인자중에 b 값이 있으면 가져오고, 없으면 빈 문자열 넣기

    if b: # b에 값이 들어있으면 true
        br = br.filter(title__icontains=b) # 의 title이 contains br의 title에 포함되어 있으면 br에 저장

    return render(request, 'border/border_search.html', { 'border_search':br , 'b':b})
    # br에는 Border 테이블에 title 이름이 'Singapore'인 데이터들이 들어있고,
    # b에는 내가 처음에 입력했던 'Singapore'가 들어있다.

 

border/border_search.html

{% extends 'base.html'%}

{% block title %}
    <title>Search</title>
{% endblock %}

{% block container %}
<center><h1>border</h1></center>
<div class="bordertable">
<table class="table table-striped">
    <thead>
        <tr>
            <th scope="col"></th>
            <th scope="col">id</th>
            <th scope="col">title</th>
            <th scope="col">author</th>
            <th scope="col">text</th>
            <th scope="col">photo</th>
        </tr>
    </thead>
        {% for post in border_search %}
            <tr>
                <th scope="row"></th>
                <td>{{forloop.counter }}</td>
                <td><a href="">{{post.title}}</a></td>
                <td>{{post.author}}</td>
                <td>{{post.text}}</td>
                <td>{{post.photo}}</td>
                <td>{{post.number}}</td>
                {{post.b}}
            </tr>
    {% endfor %}

        <h1>당신이 입력한 검색어는 {{b.title}}</h1>

    </tbody>
</table>
</div>
{% endblock %}

결과

 

 

참고url : https://wayhome25.github.io/django/2017/05/04/django-queryset-search/

 

Queryset을 활용한 아주 간단한 필터검색 구현 · 초보몽키의 개발공부로그

AskDjango 수업을 듣고 중요한 내용을 정리하였습니다.

wayhome25.github.io

 

댓글

💲 추천 글