ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 초간단 Django 게시판 13. 첫 화면(리스트 뷰) 수정
    Python/초간단 장고 Django 2021. 5. 30. 11:34
    반응형

    첫 화면을 테이블로 수정하는 것이 좋을 것 같다. 

     

    테이블

    수정한 테이블 부분의 코드이다. 

    {% if object_list %}
    <table class="table">
        <thead>
        <tr>
            <th scope="col">id</th>
            <th scope="col">title</th>
            <th scope="col">writer</th>
            <th scope="col">created</th>
        </tr>
        </thead>
        <tbody>
        {% for each in object_list %}
        <tr>
            <th scope="row">{{each.id}}</th>
            <td><a href="{% url 'detail' each.id%}">{{ each.title }}</a></td>
            <td>{{each.author}}</td>
            <td>{{each.created_at|date:'Y-m-d, H:i'}}</td>
        </tr>
        {% endfor %}
        </tbody>
    </table>
    {% else %}
    <p>an empty list</p>
    {% endif %}

    전 보단 찔끔 좋아졌다. 
    시간이 있으면 부트스트랩의 테이블 파트를 읽어 보자. 
    https://getbootstrap.com/docs/5.0/content/tables/

     

    페이지네이션

    수정 후의 코드이다.
    심플한 페이지네이션도 주석처리해서 넣어두었다. 

    {% if is_paginated %}
    <nav>
        <ul class="pagination pagination-sm">
            {% if page_obj.has_previous %}
            <li class="page-item">
                <a class="page-link" href="?page={{ page_obj.previous_page_number }}">&laquo;</a>
            </li>
            {% else %}
            <li class="page-item disabled"><span class="page-link">&laquo;</span></li>
            {% endif %}
            {% for i in paginator.page_range %}
            {% if page_obj.number == i %}
            <li class="page-item active" aria-current="page"><span class="page-link">{{ i }}</span></li>
            {% else %}
            <li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
            {% endif %}
            {% endfor %}
            {% if page_obj.has_next %}
            <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">&raquo;</a></li>
            {% else %}
            <li class="page-item disabled"><span class="page-link" aria-hidden="true">&raquo;</span></li>
            {% endif %}
        </ul>
    </nav>
    {% endif %}
    
    <!--{% if is_paginated %}-->
    <!--<p>-->
    <!--    {% if page_obj.has_previous %}-->
    <!--    <a href='?page={{page_obj.previous_page_number}}'>Previous</a>-->
    <!--    {% endif %}-->
    <!--    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}-->
    <!--    {% if page_obj.has_next %}-->
    <!--    <a href='?page={{page_obj.next_page_number}}'>Next</a>-->
    <!--    {% endif %}-->
    <!--</p>-->
    <!--{% endif %}-->

    https://getbootstrap.com/docs/5.0/components/pagination/

    페이지네이션 센터 맞추기
    https://getbootstrap.com/docs/5.0/components/pagination/#alignment

    문서화가 잘 되어 있다. 

     

    버튼

    글쓰기를 버튼으로 처리해 보았다. 

    <button type="button" class="btn btn-primary" onclick="location.href='{% url 'create' %}'">write</button>

    하지만 부트스트랩에서는 링크를 버튼으로 바꿔주는 신묘한 기능이 있다. 

    <a href="{% url 'create' %}" class="btn btn-primary">write</a>

    더 간편하니 이걸 쓰도록 하자. 

     

    로그인 관련 부분

    리스트 뷰에 한정된 기능이 아니라서, 
    base.html에 있으면 더 좋을 것 같다. 

     

    완성

    templates/board/article_list.html

    <!--templates/board/article_list.html-->
    {% extends 'base.html' %}
    {% block title %}index{% endblock %}
    {% block content %}
    {% if object_list %}
    <table class="table">
        <thead>
        <tr>
            <th scope="col">id</th>
            <th scope="col">title</th>
            <th scope="col">writer</th>
            <th scope="col">created</th>
        </tr>
        </thead>
        <tbody>
        {% for each in object_list %}
        <tr>
            <th scope="row">{{each.id}}</th>
            <td><a href="{% url 'detail' each.id%}">{{ each.title }}</a></td>
            <td>{{each.author}}</td>
            <td>{{each.created_at|date:'Y-m-d, H:i'}}</td>
        </tr>
        {% endfor %}
        </tbody>
    </table>
    {% else %}
    <p>an empty list</p>
    {% endif %}
    
    {% if is_paginated %}
    <nav>
        <ul class="pagination pagination-sm justify-content-center">
            {% if page_obj.has_previous %}
            <li class="page-item">
                <a class="page-link" href="?page={{ page_obj.previous_page_number }}">&laquo;</a>
            </li>
            {% else %}
            <li class="page-item disabled"><span class="page-link">&laquo;</span></li>
            {% endif %}
            {% for i in paginator.page_range %}
            {% if page_obj.number == i %}
            <li class="page-item active" aria-current="page"><span class="page-link">{{ i }}</span></li>
            {% else %}
            <li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
            {% endif %}
            {% endfor %}
            {% if page_obj.has_next %}
            <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">&raquo;</a></li>
            {% else %}
            <li class="page-item disabled"><span class="page-link" aria-hidden="true">&raquo;</span></li>
            {% endif %}
        </ul>
    </nav>
    {% endif %}
    
    <!--{% if is_paginated %}-->
    <!--<p>-->
    <!--    {% if page_obj.has_previous %}-->
    <!--    <a href='?page={{page_obj.previous_page_number}}'>Previous</a>-->
    <!--    {% endif %}-->
    <!--    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}-->
    <!--    {% if page_obj.has_next %}-->
    <!--    <a href='?page={{page_obj.next_page_number}}'>Next</a>-->
    <!--    {% endif %}-->
    <!--</p>-->
    <!--{% endif %}-->
    
    <a href="{% url 'create' %}" class="btn btn-primary">write</a>
    
    {% endblock %}

    반응형
Designed by Tistory.