hyeonga_code

파이선 웹구축_장고_29_검색 필터 유지 본문

Python_Django

파이선 웹구축_장고_29_검색 필터 유지

hyeonga 2023. 6. 21. 05:59
반응형

- 필터 유지

 

1. 검색 후, 다음 페이지도 검색 내용 유지되어 나오는지 확인 <templates> > <board> > 'index.html'

'index.html'

=====

1
2
3
4
5
6
7
8
9
<form>
    <select name="cate">
        <option value='sub' {% if cate == "sub" %} selected {% endif %}>Title</option>
        <option value='wri' {% if cate == "wri" %} selected {% endif %}>Writer</option>
        <option value='con' {% if cate == "con" %} selected {% endif %}>Content</option>
    </select>
    <input type="text" name='kw' value="{{kw}}">
    <button>Search</button>
</form>
cs

>> 실행 시, 다음 페이지 클릭 시, 페이지 정보만 넘기고 있기 때문에 검색과 다른 전체 데이터 페이지로 넘어간다

>> 모든 버튼 수정해야 함 "&cate={{cate}}&kw={{kw}}"

 

 

2. 버튼 기능 수정 <templates> > <board> > 'index.html'

'index.html'

=====

1
2
3
<a href="{% url 'index' %}&cate={{cate}}&kw={{kw}}"><button>Home</button></a>
<a href="{% url 'index' %}?page={{ bset.next_page_number}}&cate={{cate}}&kw={{kw}}"><button>Next</button></a>
 
cs

- 리셋버튼

<a href="{% url 'index' %}"><button type='button'>Reset</button></a>

 

- 데이터 없을 경우 보여지는 값

=====

1
2
3
4
5
{% empty %}
    <tr>
        <th colspan="5"> {% if kw %} NO RESULT{% else %}NO DATA {% endif %}</th>
    </tr>
{% endfor %}
cs

= 데이터 정렬 기능

- b = b.order_by('subject')

#_ 역방향은 - 붙여서 작성

<board> > 'views.py'

=====

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
def index(request):
    cate = request.GET.get('cate','')
    kw = request.GET.get('kw','')
    
    if kw:
        if cate == 'sub':
            b = Board.objects.filter(subject__startswith=kw)
        elif cate == 'wri':
            b = Board.objects.filter(writer=kw)
        elif cate == 'con':
            b = Board.objects.filter(content__contains=kw)
    else:
        b = Board.objects.all()        
    
    b = b.order_by('subject')
    
    pg = request.GET.get('page',1)
    pag = Paginator(b,10)
    obj = pag.get_page(pg)
    print(cate, kw)
    context = {
        "bset": obj,
        'cate' : cate,
        'kw' : kw
    }
    return render(request, "board/index.html", context)
cs

3. 페이지 정리 <templates> > <board> > 'index.html'

'index.html'

=====

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
{% load mathfilters %}
<h1><b>SH BOARD</b></h1>
 
<table border="1">
    <tr>
        <th>NO</th>
        <th>SUBJECT</th>
        <th>WRITER</th>
        <th>DETAIL</th>
        <th>DELETE</th>
    </tr>
    {% for i in bset %}
        <tr>
            <td>{{ bset.start_index|add:forloop.counter}}</td>
            <td>{{ i.subject }}</td>
            <td>{{ i.writer }}</td>
            <td><a href="{% url 'detail' i.id %}"><button>상세보기</button></a></td>
            <td><a href="{% url 'delete' i.id %}"><button>삭제하기</button></a></td>
            <!--
            <td>{{ forloop.counter }}</td>
            <td>{{ i.subject }}</td>
            <td>{{ i.writer }}</td>
            <td><a href="{% url 'detail' i.id %}"><button>상세보기</button></a></td>
            <td><a href="{% url 'delete' i.id %}"><button>삭제하기</button></a></td>
            -->
        </tr>
    {% empty %}
        <tr>
            <th colspan="5"> {% if kw %} NO RESULT{% else %}NO DATA {% endif %}</th>
        </tr>
    {% endfor %}
</table>
{{bset.number}} page<br>
 
{% if bset.has_previous %}
    <a href="{% url 'index' %}&cate={{cate}}&kw={{kw}}"><button>Home</button></a>
    <a href="{% url 'index' %}?page={{ bset.previous_page_number}}&cate={{cate}}&kw={{kw}}"><button>Back</button></a>
{% else %}
    <button disabled>Home</button>
    <button disabled>Back</button>
{% endif %}
 
{% for i in bset.paginator.page_range %}
    {% if bset.number|add:4 >= i and i >= bset.number|sub:3%}
    <a href="{% url 'index' %}?page={{i}}&cate={{cate}}&kw={{kw}}"><button {% if best.number == i %} disabled {% endif %}> {{i}} </button></a>
    {% endif %}
{% endfor %}<br>
 
{% if bset.has_next %}
    <a href="{% url 'index' %}&cate={{cate}}&kw={{kw}}"><button>Home</button></a>
    <a href="{% url 'index' %}?page={{ bset.next_page_number}}&cate={{cate}}&kw={{kw}}"><button>Next</button></a>
{% else %}
    <button disabled>Home</button>
    <button disabled>Next</button>
{% endif %}
<br>
<form>
    <select name="cate">
        <option value='sub' {% if cate == "sub" %} selected {% endif %}>Title</option>
        <option value='wri' {% if cate == "wri" %} selected {% endif %}>Writer</option>
        <option value='con' {% if cate == "con" %} selected {% endif %}>Content</option>
    </select>
    <input type="text" name='kw' value="{{kw}}">
    <button>Search</button>
    <a href="{% url 'index' %}"><button type='button'>Reset</button></a>
</form>
cs

 

반응형